XSS专题
[TOC]
1 介绍
XSS(Cross-site scripting,跨站脚本)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。
2 成因
2.1 Html/JavaScript 是用户端可触达的解析性语言
Html/JavaScript 和 SQL 一样,都是用户端可触达的解析性语言。所以,用户可以改变最终的代码。(不同于 PHP 等,用户无法改变 PHP 的代码,只能改变数据)
用户可触达,所以用户就能改变代码来进行攻击。
2.2 浏览器如何解析 html/javaScript
- http://coolshell.cn/articles/9666.html
- http://taligarsiel.com/Projects/howbrowserswork1.htm
自己的理解:浏览器接收到了后端返回的html原文件后,会生成一个DOM树,解析javaScript动作列表之类的,然后,javaScript 就在做自己的动作了。同时,浏览器会动态实时监控DOM树的变化,看是否有新的 javaScript 生成或旧的灭亡,有的话,就把其加入到动作列表或从列表中删除。
直接插入标签是不会执行的。要创建script元素才可以。
https://github.com/damoclesX/damoclesX.github.io/issues/17
结论:用户可控制的输入在前端形成了完整的 javaScript 语句,即可完成攻击。
3 分类
3.1 反射型(非持久性XSS)
反射型XSS也被称为非持久性XSS,是现在最容易出现的一种XSS漏洞。发出请求时,XSS代码出现在URL中,最后输入提交到服务器,服务器解析后在响应内容中出现这段XSS代码,最后浏览器解析执行。
1 | 简单流程: |
3.2 存储型(持久性XSS)
存储型XSS又被称为持久性XSS,它是最危险的一种跨站脚本,相比反射型XSS和DOM型XSS具有更高的隐蔽性,所以危害更大,因为它不需要用户手动触发。 允许用户存储数据的web程序都可能存在存储型XSS漏洞,当攻击者提交一段XSS代码后,被服务器端接收并存储,当所有浏览者访问某个页面时都会被XSS,其中最典型的例子就是留言板。
1 |
|
3.3 DOM 型
DOM型就完全与后端无关,是前端的事情。
1 |
|
4 防护策略
4.1 危害
JavaScript可以用来获取用户Cookie、改变页面内容、URL转跳,那么存在XSS漏洞的网站,就可以盗取用户Cookie、黑掉页面、导航到恶意网站,而攻击者仅仅需要向页面中注入JavaScript代码。
- 盗取管理员Cookie
- XSS Worm
- 挂马(水坑攻击)
- 键盘记录(有局限性)
- 利用网站重定向
- 修改网页内容
- 等等