​2017-04-30于青岛第一海水浴场

XSS定义

XSS:(Cross Site Script)跨站脚本攻击,是一种“HTML注入”,由于攻击的脚本多数时候是跨域的,所以称之为“跨域脚本”。攻击者往Web页面里插入恶意html、javascript、style代码,破坏页面结构,盗用cookie。

XSS攻击方式

反射型:发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。

存储型:存储型和反射型的区别在于提交的攻击代码会存储在服务器端,下次请求目标页面时不用再提交xss攻击代码

XSS原理

xss攻击条件

1. 需要向页面注入恶意代码;

2. 恶意代码能够在浏览器被成功执行;

示例

1. 使用express.js构建Node应用,展示反射型XSS攻击

```

$ npm install express-generator -g

$ express xss

$ cd xss 

$ npm install

$ npm run start

# 访问 http://localhost:3000/

```

构建成的项目文件:

1. 在router文件夹下的index.js文件中,添加一个接收的xss参数。

2. 在views文件夹下的index.jade文件中,将输入的xss攻击代码注入到页面中去。

3. 运行```npm run start```,打开控制台发现浏览器拦截了xss攻击(见最后相关内容链接)

关闭浏览器拦截xss攻击

4. 再次运行```npm run start```,在地址栏输入:```http://localhost:3000/?xss=<img src="null" onerror="alert('xss攻击代码')">```

分析:

当攻击者通过url的参数注入xss攻击代码,页面解析并执行了代码,或破坏代码结构或获取用户的一些信息。注入html代码,像Dom上的onclick,onchange,onerror事件可执行js代码。<iframe>标签在页面中插入第三方页面,在页面中植入广告。注入style样式代码,通过样式来改变页面展示,例如将body {display: none !important}代码注入到页面。script代码更为严重。

XSS防御措施

示例:

模拟评论功能,在输入框中输入评论功能,并在页面上展示输入的内容。

在上面的图中看到,在输入框中输入了带有攻击性的代码段'<p> xss攻击模拟 <img src='null' onerror='alert(1)'></p>',通过下面控制台可看出,当获取评论的时候,在下面展示的是文字,和<img>标签。在<img>标签中的属性没了,可延伸当在页面渲染这段代码时,攻击性内容过滤掉,避免了攻击。

1. 编码

对用户输入的数据进行HTML Entity编码,例如: '<'字符用'&lt'的形式显示出来

2. 过滤

移出用户上传的Dom属性,如onerror

移出用户上传的style节点,script节点,iframe节点等

3. 矫正

避免直接对HTML Entity解码

使用Dom Parse转换,矫正不配对的Dom标签

相关内容

0. XSS攻击及防御Demo地址:https://github.com/liuchunhui...

1. jade:一个高性能的模板引擎,可参考文档https://segmentfault.com/a/11...

2. X-XSS-Protection:文档https://developer.mozilla.org...

3. HTML Entity编码表:http://www.cnblogs.com/mingmi...

4. 用到HTML解析的两个库:

https://github.com/mathiasbyn...

https://github.com/blowsie/Pu...


刘春辉同学
48 声望5 粉丝