当前位置: 首页 > Web前端 > vue.js

一文读懂Web安全

时间:2023-04-01 00:46:33 vue.js

Web安全是互联网中不可或缺的领域。这一领域诞生了大量的黑帽子和白帽子。他们是安全领域的王者。在平时,他们利用各种别出心裁的技术,各种技术相互较量,不时会掀起一股Web安全的浪潮。本文从一个吃瓜群众的角度,讲述一些关于网络安全的有趣故事。安全世界观安全攻防案例总结与思考安全世界观互联网发展之初,在IE浏览器被垄断的时候,大家上网的目的很简单,主要是通过浏览器来分享信息和获取消息。但是随着互联网的不断发展,一个网页可以做的事情越来越多。除了看新闻,我们还可以看视频、玩游戏、购物、聊天等,这些功能极大地丰富了我们的生活。随着网页功能的逐渐增多,一些黑帽开始出现,他们试图通过一些技术手段牟利。小时候印象最深的就是木马病毒,它可以监视你的键盘,把你在键盘上敲的内容发送到黑客的机器上。通过分析这些内容,黑客可以轻松获取您的游戏帐号。和密码。之后就诞生了一些杀毒软件,专门解决网络上的各种病毒。随着杀毒软件的不断发展,已经成为电脑不可或缺的软件。为什么会出现这样的安全问题?说到底,安全是信任的问题。如果大家按照正常流程上网,不谋取私利,就不会有安全问题可谈。安全的根本是信任,但让每个人都相互信任说起来容易做起来难。现阶段我们可以做的是:继续做好安全防护工作,让漏洞越来越少,非法攻击越来越难,这样才能逐步减少黑帽,让病毒制造者越来越少。较少的。如何做好安全工作要做好安全工作,首先要了解安全问题的属性。前人经过无数次的实践,最终将安全的属性总结为安全的三要素,即:机密性、完整性和可用性。机密性保护数据内容不被泄露。通常使用加密方法。完整性保护数据内容完整,未被篡改。通常使用数字签名方法。可用性数据始终可用。通常用于防御DOS。有了安全的3个要素,我们就可以评估安全问题了。资产分类找出最重要的数据。找出最重要数据的宿主空间,比如:在数据库中,那么数据库必须重点防御。找出数据库所在的宿主空间,比如:在一台服务器上,那么这台服务器要做二级防御。找出服务器的主机空间,比如:在OSI网络层,那你就要做网络层的一般防御。威胁分析识别威胁(可能的伤害来源)。识别风险(可能的损失称为风险)。风险分析采用多准则决策分析,即:风险=威胁等级*威胁可行性。计算所有威胁,对最终风险进行排序,优先解决风险最大的问题。确定解决方案确定不安全的实施并确定解决方案。解决方案不应改变业务需求的初衷。解决方案需要对用户透明,不能改变用户的习惯。完成安全评估后,我们就有了安全解决方案,后续的安全工作只需要按照这个方案去做,就不会出现问题。安全原则有了安全解决方案之后,我们还可以制定一些安全原则,按照这些原则做事可以让我们事半功倍。黑白名单原则白名单方案是指对安全资源进行授权。黑名单方案是指禁用不安全的资源。我们应该首先使用白名单方案,因为黑名单通常不能统计所有不安全的资源。例如:XSS的攻击方式有很多种,可以使用script、css、image标签等,即使将这些标签加入黑名单,也不能保证其他标签没有XSS攻击风险。最小权限原则只授予必要的权限,不过度授权,减少出错的机会。例如:普通权限的Linux用户只能操作~文件夹下的目录。如果有人想删库跑路,执行rm-rf/时会提示没有权限。纵深防御原则这个原则类似于木桶理论,安全的高低往往取决于最短的板。即:不留短板,黑帽子往往可以以短板为突破口,挖更大的漏洞。数据与代码分离原则当用户数据作为代码执行时,数据与代码的边界被混淆,导致安全问题。例如:XSS就是利用这个来进行攻击。不可预测性原则该原则是提高攻击门槛,有效防止基于篡改和伪造的攻击。例如,在数据库中使用uuid代替数字类型的自增主键,可以防止id被攻击者猜到,从而进行批量操作。代币还利用了不可预测性,攻击者如果不能构造代币就无法攻击。有了这些安全原则,我们就可以开始了。下面介绍几个常见的攻防案例。安全攻防案例安全攻防案例很多。下面是几个暴露率比较高的安全问题。客户端攻击XSS攻击CSRF攻击点击劫持XSS攻击XSS攻击的本质是将用户数据作为HTML代码的一部分执行,从而混淆原有的语义,产生新的语义。如图,我们注册了一个用户名,所有能看到这个用户名的页面都会弹出当前浏览器的cookie,如果代码的逻辑是Cookie被发送到攻击者的网站,允许攻击者以以前的用户身份登录。XSS攻击的方式有很多种,所有与用户交互的地方都可能存在XSS攻击。例如:所有输入框。窗户。地点。窗口名称。文档。推荐人。文档。曲奇饼。本地存储。...因为用户与页面交互的地方很多,肯定有一些XSS攻击方式没有被发现,一旦被黑帽发现,可能会造成严重的影响,所以一定要引起重视。XSS攻击的影响被XSS攻击成功后,攻击者可以获得大量的用户信息,比如识别用户UA等。识别用户浏览器扩展。识别用户访问过的网站。通过CSS的Visited属性。获取用户的真实IP。通过WebRTC等StealCookies伪造用户登录,窃取用户信息。XSS网络钓鱼。在页面中注入登录弹窗,让用户误以为是网站(实际上是钓鱼网站)的登录弹窗。一旦用户登录,账号密码就会泄露给钓鱼网站。XSS攻击防御目前,XSS已经受到互联网业界的重视,很多开发框架都内置了安全的HTML渲染方式。我们还可以自定义一些安全配置。在HTTP中配置http-onlyheader,让前端JS无法操作Cookie。输入校验,用户提交数据时使用XssFilter过滤掉不安全的数据。输出检查,当页面呈现时,过滤掉危险数据。CSRF攻击CSRF(Cross-siterequestforgery)跨站请求伪造是一种利用用户身份进行一些用户无意的操作。如图:用户先登录服务器B,然后访问服务器C,服务器C冒充A通过恶意脚本调用服务器B上的某个功能。对于服务器B来说,它认为这是A发起的请求,就把它当作一个正常的请求。试想,如果C冒充A进行转账,肯定会造成不小的经济损失。CSRF防御方式CSRF防御方式主要有以下几种:验证码要求用户对每次请求进行验证,以保证请求的真实可靠。即:恶意脚本无法识别复杂验证码的特性保证了每次请求都是合法的。Referer检查检查发起请求的服务器是否是目标服务器。即:HTTP请求中的Referer头传递的是当前请求的域名。如果域名是非法服务器的域名,则需要禁止访问。Token使用不可预测性原理。每个请求都必须携带一个随机代码。这个随机码是普通用户保存的。黑帽不知道随机码,因此无法冒充用户提出请求。点击劫持点击劫持是一种视觉欺骗攻击。攻击者通过iframe嵌套将被攻击网站嵌入到自己的网页中,并将iframe设置为透明,在页面上露出一个按钮,诱导用户点击。就像一张图片上面盖了一层透明纸,你看到的是攻击者的页面,但实际上这个页面只是在最下面,你实际点击的是另外一个被攻击者透明化的网页。如图所示,当你点击页面上的按钮时,你认为它会...,但实际上你所做的是关注某人的博客。Click-jacking防御由于click-jacking主要是通过iframe进行的,所以防御主要是基于iframe。方案一:Framebusting正常网站使用JS脚本判断是否被恶意网站嵌入。例如,如果检测到一个博客站点被iframe打开,它可以自动跳转到一个正常的页面。if(self!==top){//跳回原页面top.location=self.location;}方案二:使用HTTP中的x-frame-options头控制iframe的加载,有3个可选值:DENY,表示该页面不允许通过iframe显示。SAMEORIGIN表示页面可以显示在同一个域名下的iframe中。ALLOW-FROM,表示页面可以显示在来自指定来源的iframe中。配置iframe的沙箱属性sandbox="allow-same-origin"以仅从与主站点相同的域加载资源。服务器端攻击服务器端攻击的攻击方式也有很多种。这里有几个常见的。SQL注入攻击文件上传漏洞登录认证攻击应用层拒绝服务攻击webServer配置安全SQL注入攻击与XSS一样,SQL注入也是一种违反数据与代码分离原则的攻击方式。如图所示,我们可以使用SQL注入的方式,直接使用管理员账号免密码登录。攻击的前提是:后台只使用简单的拼接SQL的方式查询数据。#拼接的sql如下:select*fromuserwhereusername='admin'or1=1andpassword='xxx'#不管输入什么密码,这条sql语句都可以查询到管理员的信息另外,SQL注入有几种方式:利用SQL检测、猜测数据库表名、列名。通过MySQL的内置基准测试数据库字段。例如:一段伪代码selectdatabaseascurrentifcurrent[0]==='a',benchmark(10000,'guessedcorrectly')如果说明猜测正确,则延迟10s返回成功。使用存储过程执行系统命令通过内置方法或存储过程执行shell脚本。如:xp_cmdshell、sys_eval、sys_exec等。字符串截断例如:MySQL在处理超长字符串时会显示警告,但会执行成功。注册一个admin+50个空格的用户会触发截断,最后添加一个admin用户,这样就可以拥有管理员权限了。SQL注入防御防止SQL注入最好的方法就是不要手动拼接SQL语句。最好的方案,使用preparedstatements绑定变量,通常是指框架提供的拼接SQL变量的方法。这样的语义不会改变,变量总是被当作变量对待。严格限制数据类型。如果注入其他类型的数据,会直接报错,不允许执行。使用安全的存储过程和系统函数。CRLF注入在注入攻击中,换行注入也是一种非常常见的攻击方式。如果在HTTP请求头中注入2个换行符,会导致换行符后的所有内容都被解析为请求实体部分。攻击者通常在设置-cookie时注入一个换行符来控制请求的内容。文件上传漏洞上传文件是Web开发中的常见功能,如果不加以处理,很容易引发攻击。如图所示,攻击者上传一个木马文件,通过返回的URL访问,控制服务器。通常我们会控制上传文件的后缀,但这并不能完全解决问题。攻击者还可以通过以下方式进行攻击:伪造一个普通文件,将木马文件作为普通后缀上传。如果我们想避免这个问题,我们可以继续判断上传文件的文件头的前10个字节。Apache的解析方式是从后往前解析,直到找到可识别的后缀。例如:上传一个abc.php.rar.rar.rar可以绕过后缀检查,但是执行的时候会作为一个php文件执行。IIS会截断分号进行解析,如:abc.asp;xx.png可以绕过后缀检查,但执行时会作为asp文件执行。HTTPPUT方法允许上传文件到指定位置,HTTPMOVE方法还可以修改上传的文件名。通过两者的配合,可以先上传正常的后缀,再修改为恶意后缀。PHPCGI路径问题执行http://abc.com/test.png/xxx.php时,会将test.png解析为php文件。如果用户恰好将恶意php脚本上传为图片,就会触发本次攻击。文件上传漏洞防御文件上传漏洞防御可以从以下几点考虑:将上传文件的目录设置为不可执行。判断文件类型,检查MIMEType,配置白名单。检查后缀并配置白名单。使用随机数重写文件名和文件路径上传文件后,随机修改文件名,使攻击者无法进行攻击。单独设置文件服务器的域名单独做一个文件服务器,使用单独的域名,使用同源策略,避免客户端攻击。一种常见的做法是将静态资源存储在CDN上。登录认证攻击登录认证攻击可以理解为一种破解登录的方法。攻击者通常使用以下方法进行破解:彩虹表攻击者收集了大量明文与MD5的对应关系,用于破解MD5密文找到原文。对于彩虹表中的MD5密码,我们可以加盐并进行二次加密,避免被破解。SessionFixation攻击利用服务器端应用系统的SessionID固定机制,依赖他人使用相同的SessionID来获得认证和授权。攻击者登录失败后,后台返回SessionID,攻击者将SessionID交给普通用户登录,登录成功后,攻击者可以使用SessionID作为普通用户登录。如果浏览器每次登录都刷新SessionID,就可以避免这个问题。Session不断攻击有时候,后台考虑用户体验,只要用户还活着,用户的Session就不会失效。攻击者可以通过不断发起请求来保持这个Session的存活。登录认证防御方式多因素认证密码作为第一道防线,但密码验证成功后,我们可以继续验证:动态密码、数字证书、短信验证码等,确保用户安全。由于短信和网页是完全独立的系统,攻击者很难获得短信验证码,从而无法进行攻击。另外,前端登录认证的方式有很多种。对此感兴趣的可以参考我之前写的前端登录。这篇文章就够了。应用层拒绝服务攻击应用层拒绝服务攻击又称DDOS攻击,是指使用大量请求造成资源过载,导致服务器不可用。DDOS攻击方式通常有以下几种:SYNFlood泛洪攻击利用HTTP3次握手机制消耗服务器连接资源。例如:攻击者发起大量的HTTP请求,但是并没有完成3次握手,而是仅仅进行了2次握手。此时服务器会继续等待,直到超时。这个时候服务器会一直忙于处理大量的垃圾请求,无暇顾及正常的请求。Slowloris攻击以极低的速率发送HTTP请求头,消耗服务器连接资源。例如:攻击者发送大量的HTTP请求,但是每个请求头发送的速度非常慢,每10s发送一个字符。服务器不能为了等待数据而一直保持连接。这样,服务器连接数会很快被占用。向上。HTTPPOSTDOS发送HTTP时,指定一个非常大的Content-Length,并且间隔很长的时间发送,消耗服务器连接资源。CC攻击不断发起对一些非常消耗资源的页面的请求。例如:页面中的某些页面需要在后端进行大量的计算,或者需要做非常耗时的数据库查询。在大量请求下,可能会占用服务器的CPU、内存等资源。ServerLimitDOS通过XSS注入超长cookie,导致超过Web服务器能承受的RequestHeader长度,服务器将拒绝服务。ReDOS对一些有缺陷的正则表达式发起大量请求,消耗系统资源。应用层拒绝服务攻击防御应用层拒绝服务攻击目前还没有完美的解决方案,但我们还是可以做一些优化。在应用代码中做好性能优化,合理使用Redis、Memcache等缓存方案,降低CPU资源占用。优化网络架构,构建后端负载均衡。静态资源使用CDN进行管理。限制请求频率服务器计算所有IP地址的请求频率,过滤掉异常IP并禁用。可以使用LRU算法缓存前1000个请求的IP,如果IP请求频率过高则禁用。其实对付DDOS的核心思想就是禁用不信任的用户,保证资源被正常用户使用。WebServer配置安全当我们部署Web应用时,经常会用到Nginx、Apache、IIS、Tomcat、Jboss等Web服务器。这些服务器也存在一些安全风险。如果配置不当,很容易被攻击。在配置Web服务器时,可以参考以下几点:以用户权限运行Web服务器,遵守最小权限原则,以最小权限运行Web服务器,被入侵后限制权限。删除可视化后台在运行Tomcat、Jboss等Web服务器时,会默认开启可视化运行后台,运行在8080端口,首次访问不认证。攻击者可以利用可视化后台远程加载war包或上传木马文件进行控制。及时更新版本主流的web服务器每隔一段时间都会修复一些漏洞,记得及时更新版本。总结与思考本文介绍了Web安全的基本概念,以及大量的攻防技巧。事实上,这只是网络安全的冰山一角。如果你对此感兴趣,不妨在安全领域继续深造,一定会看到更广阔的前景。天空。作为开发者,我们在写代码的时候就应该考虑到安全性,形成自己的一套安全开发体系,将安全牢记在心,时刻考虑安全,这样才能无形中化解不法分子的攻击。最后,如果你对此有什么想法,欢迎留言评论!