怎么防止跨站脚本攻击(XSS)?

一、XSS 是什么?

跨站脚本攻击(Cross-site scripting,XSS)是攻击者向网站注入恶意脚本,等待用户访问网站并自动运行恶意脚本发起攻击的过程。不同的脚本可以实现不同目的:

  • 盗用cookie,获取敏感信息。
  • 利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。
  • 利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
  • 利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
  • 在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DoS攻击的效果。

二、XSS 分为3类
1、存储型(持久型)

攻击者把恶意脚本注入服务器并存储起来,等待受害者请求此脚本并在浏览器中自动运行。

  • 使用场景:攻击者在评论区提交带有恶意脚本的评论,如果服务器检查不出恶意脚本,那么此恶意评论会被存入服务器数据库,下一个用户访问时,评论会被自动获取并展示,其中恶意脚本也被自动运行了。

    // 在评论区,直接把下面的内容提交,如果服务器不做检查,下面内容就被存入服务器数据库
    

2、反射型(非持久型)

通过用户点击恶意链接,获取用户已登录的会话cookie。

http://www.example.com/transfer?s=

3、DOM 型

在用户浏览的页面中直接注入代码。

  • 实例:HTML中有个锚的功能,也就是通过 #id 来实现当页面的跳转。

    # 下面链接表示打开页面,并把 id 为 doc 这个元素滚到页面最上面
    http://www.example.com/#doc
    
    # 把 doc 换成 脚本,再访问此页面,意味着脚本会被自动执行
    http://www.example.com/#
    
    # 备注:此实例只是解释说明用,目前浏览器早就屏蔽了这样的漏洞。

三、怎么防止 XSS 攻击?

XSS 来源于用户提供的内容,只要过滤掉其中的恶意代码即可,Node.js 项目中推荐使用 xss 库来完成这个工作。

// 1、安装
npm install xss

// 2、使用
var xss = require('xss');
var html = xss('');
console.log(html);

四、xss 相关工具

五、参考文档

你可能感兴趣的