XSS(cross site script),跨站脚本攻击,也成为CSS,是web程序中常见的漏洞。与SQL注入类似,SQL注入是通过SQL语句作为用户的输入,达到查询/删除数据库中数据的目的。而在XSS中,是通过网页中插入恶意脚本,且当用户浏览网页时,脚本就会成功地在用户的浏览器上执行,从而达到攻击者的目的。一次成功的XSS攻击,可以获取到用户的cookie,导航到恶意网站;可以获取用户联系人列表,向联系人发送虚假的诈骗信息;也可以删除用户日志等。XSS还可以与其他攻击同时实施,达到更大的破坏。
XSS攻击类型
分为两种:DOM based XSS攻击和Stored XSS攻击。
DOM based XSS攻击
顾名思义,DOM based XSS攻击是一种基于网页DOM结构的攻击。也有程序员称之为非持久性xss攻击,这种攻击影响范围小,仅对当次的网页访问产生影响。
Stored XSS攻击
这种类型的攻击,会影响范围大,而且可能是web服务器自身安全的漏洞。攻击者将攻击脚本上传至web服务器或者数据库上,是的所有访问该页面的用户都面临信息泄露的可能。
XSS漏洞修复
我们在测试过程中,信奉的原则就是:不相信开发写的代码。在对待安全问题时,我们的原则就是不相信所有的用户都是正常用户,不相信用户输入的数据。
对待xss攻击,攻击的代码不一定在<script></script>中。
1、将重要的cookie信息标记为http only ,这样的话,JavaScript中的document.cookie语句就不能获取到cookie
2、只允许用户输入我们期望的数据,在输入时就进行限制。 如:年龄的输入框中,只允许用户输入数字。 而数字之外的字符都过滤掉。
3、对数据进行Html Encode 处理
4、过滤或移除特殊的Html标签, 例如: <script>, <iframe> , < for <, > for >, " for
5、过滤JavaScript 事件的标签。例如 "onclick=", "onfocus" 等等
6、尽量使用post提交表单,而不是get。post的操作不可能绕开JavaScript的使用,这会给攻击者增加难度,减少可利用的跨站漏洞
HTML Encode
我们对用户输入的数据进行HTML encode 处理,将中括号,单引号,引号这类特殊字符进行编码
HTML characters | HTML Encoded Entities |
ss-than character (<) | < |
greater-than character (>) | > |
ampersand character (&) | & |
double-quote character (") | " |
space character( ) | |
Any ASCII code character whose code is greater-than or equal to 0x80 |
&#<number>, where <number> is the ASCII character value. |
比如用户输入:
<script>window.location.href=”http://www.baidu.com”;</script>,保存后最终存储的会是:
<script>window.location.href="http://www.baidu.com"</script>
在展现时浏览器会对这些字符转换成文本内容显示,而不是一段可执行的代码.
自己可以写一段代码进行转换,其实我们平时用的fiddler中是有快捷的转换方式
fiddle-Tools-TextWizard——输入需要转换的字符——选择HTML Encode 即可转换
部分内容摘自小坦克博主:http://www.cnblogs.com/TankXiao/archive/2012/03/21/2337194.html