web安全之XSS攻击

原创 西红柿是小贱猫 随笔 js中级知识 105阅读 2018-12-13 17:41:25 举报

什么是XSS

开放式 Web 应用程序安全项目(OWASP, Open Web Application Security Project) 在 2017 年公布了十大安全漏洞列表:

其中,XSS(跨站脚本攻击)是一种历史悠久又臭名昭著的攻击方式。

  • XSS是跨站脚本攻击的缩写,是一种网站应用程序的安全漏洞攻击,是代码注入的一种。
  • 通常是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。
  • 这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。
  • 攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

XSS分类

反射型XSS

反射性XSS,也就是被动的非持久性XSS。诱骗用户点击URL带攻击代码的链接,服务器解析后响应,在返回的响应内容中隐藏和嵌入攻击者的XSS代码,被浏览器执行,从而攻击用户。
URL可能被用户怀疑,但是可以通过短网址服务将之缩短,从而隐藏自己。

持久型XSS

也叫存储型XSS——主动提交恶意数据到服务器,攻击者在数据中嵌入代码,这样当其他用户请求后,服务器从数据库中查询数据并发给用户,用户浏览此类页面时就可能受到攻击。可以描述为:恶意用户的HTML或JS输入服务器->进入数据库->服务器响应时查询数据库->用户浏览器。
常见于用户输入发表评论等情况,如果客户端没有做过滤,服务端也没有做过滤,将包含恶意代码的内容直接展示出来,就会造成攻击。

DOM-based XSS

基于DOM的XSS,通过对具体DOM代码进行分析,根据实际情况构造dom节点进行XSS跨站脚本攻击。
注:domxss取决于输出位置,并不取决于输出环境,因此domxss既有可能是反射型的,也有可能是存储型的。dom-based与非dom-based,反射和存储是两个不同的分类标准。

XSS实现

反射型XSS

在钓鱼网站中插入这段代码,就会在用户无知觉的情况下向指定的接口发送一条请求,当前网站的cookie也作为参数被发送了。

如果用户不小心点击了这条伪装成正常链接的消息,就会出现一个关不掉的弹窗,当然这只是一个小玩笑,还可以在JavaScript中加入很多恶意代码。
持久型XSS示例

如果有一个用户可以输入的网站,比如发布评论,服务端直接将含有恶意代码的文本存储并发送给其他客户端,客户端直接展示,则所有浏览到这条评论的用户都会看到恶意弹窗。

防御

  1. 由于XSS危害极大,当前的框架基本都对它做了处理,如vue.js react.js等都对html插值进行了抽象、过滤和转义。
  2. 对于敏感的cookie信息,加上http-only属性,这样客户端向后台正常发请求时会把cookie放在head中,但是可以防止恶意代码通过document.cookie的方式取到。
  3. 使用XSS Filter
    • 输入过滤 对用户提交的数据进行有效性验证,仅接受指定长度范围内并符合我们期望格式的的内容提交,阻止或者忽略除此外的其他任何数据。
    • 输出转义 当需要将一个字符串输出到Web网页时,同时又不确定这个字符串中是否包括XSS特殊字符,为了确保输出内容的完整性和正确性,输出HTML属性时可以使用HTML转义编码(HTMLEncode)进行处理,尽量用v-text代替v-html等,输出到<script>中,可以进行JS编码(JavaScriptEncode)。

参考文献
对于跨站脚本攻击(XSS攻击)的理解和总结
WEB 安全之 XSS 攻击与防御

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复