一、跨站脚本攻击XSS概述
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。
攻击者可以使用户在浏览器中执行其预定义的恶意脚本,其导致的危害可想而知,如劫持用户会话,插入恶意内容、重定向用户、使用恶意软件劫持用户浏览器、繁殖XSS蠕虫,甚至破坏网站、修改路由器配置信息等。
二、攻击原理
HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,<title>与</title>之间的字符是页面的标题等等。当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。
XSS攻击有反射型、存储型、DOM型,原理如下:
- 反射型:需要欺骗用户自己去点击链接才能触发XSS代码,大多数是用来盗取用户的Cookie信息。XSS代码被作为目标地址的url参数发到目标服务器,服务器返回的XSS代码将被浏览器解析并执行。
- 存储型:将XSS代码通过表单提交到服务器,该代码会被服务器存储,当用户访问到存在XSS代码的页面时,XSS代码将在浏览器端执行。比如黑客在贴吧留言,将XSS代码附加到留言表单提交,当其他用户访问到该留言的页面时,XSS代码会被执行。
DOM型:它是一种特殊反射型,基于DOM的XSS漏洞是指受害者端的网页脚本在修改本地页面DOM环境时未进行合理的处置,而使得攻击脚本被执行。在整个攻击过程中,服务器响应的页面并没有发生变化,引起客户端脚本执行结果差异的原因是对本地DOM的恶意篡改利用。 攻击原理:
- 攻击者构建恶意脚本诱导用户点击;
- 服务器返回的是正常的页面;
- 页面在浏览器渲染时,如果页面中有使用URL参数进行动态Dom操作(通常是document.referer、window.name、window.location、innerHTML、document.write等DOM操作)时,恶意脚本可能会被渲染到DOM中被执行;
三、攻击目的
- 盗用cookie,获取敏感信息,假冒用户登录系统。
- 利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。
- 利用iframe、frame、XMLHttpRequest或上述Flash等方式,以被攻击用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
- 利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
- 在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDoS攻击的效果。
四、防御方法
XXS恶意代码通常作为参数值(url参数值或者表单值)被提交到目标站点,如果站点没有对这些参数进行校验检查处理,直接返回到浏览器端,浏览器在渲染时可能会将XSS代码执行,代码执行通常是盗取信息推送到黑客的服务器,黑客拿到这些信息进行冒充访问目标网站。
- 不信任用户提交的任何内容,对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、REFER、POST数据等。
- 用户向服务器上提交的信息要对URL和附带的的HTTP头、POST数据等进行查询,对不是规定格式、长度的内容进行过滤。
- 实现Session 标记、验证码系统或者HTTP引用头检查,以防功能被第三方网站所执行,对于用户提交信息的中的img等link,检查是否有重定向回本站、不是真的图片等可疑操作。
- 确认接收的内容被妥善的规范化,仅包含最小的、安全的Tag,去掉任何对远程内容的引用(尤其是样式表和javascript),使用HTTP only的cookie。
- 避免直接在cookie中泄露用户隐私,通过使cookie和系统IP绑定来降低cookie泄露后的危险。这样攻击者得到的cookie没有实际价值,很难拿来直接进行重放攻击。