XSS,即Cross Site Scripting,叫X是因为之前有了一个CSS。中文可以叫跨站脚本攻击。是前端工程师的一大威胁。
XSS的根本,就是有恶意用户把代码植入了你要访问的页面中,从而控制你访问的页面,最终目的是获取你的信息。
1,代码植入
1)URL植入
恶人把构造好的URL,通过聊天工具或论坛或邮件等发布出去,如果有人访问这个URL,【或有触发条件】攻击就会执行。
例如:http://126.com?frameurl=javascript%3Adocument.domain%20%3D%20%22126.com%22%3Balert%28parent.pagev%29%3Bvoid%280%29%3B
2)内容植入
恶人把精心设计的内容保存到服务器,这些内容可能会被展示给别人看(例如个人博客的文章或昵称),一旦别人查看,【或有触发条件】攻击就会执行。
2,控制页面的方式
危险地带,如下代码的alert均可替换为任何危险代码,pagev为页面变量
1)html标签属性,例如:href,value,title,iframe.src等
例如iframe.src
document.getElementById("tiframe").src = "javascript:document.domain = "126.com";alert(parent.pagev);void(0);";
例如value属性,我的名字是:myname" /> <script>alert(pagev)</script>
<input value="myname" /><script>alert(pagev)</script>
2)innerHTML
document.getElementById("tdiv").innerHTML = "<img src="xss.jpg" onerror="alert(0)"></img>";
3)script标签
攻击代码在这里???呵呵呵
4)document.write
攻击代码在这里???呵呵呵
5)html标签事件,例如:onclick或onerror等
6)expression
7)eval(str)或Function(str)()
等等,还有其他
3,获取信息
1)cookie值
2)输入的内容(包括密码)
3)页面上的所有内容
4)本机IP
5)如果有信任的控件,那就可以控制该控件,该控件能做的它也就能做。
6)其他事件,例如恶搞或弹出广告之类
4,防范方法
1,注入防范
注入防范是一项大工程,首先我们要最大限度的限制用户产生内容(来源于用户输入及修改URL),其次实在没有办法,需要评估影响进行转码或过滤。如下三个方法,可选择使用。
1)转码
对特殊字符进行转码
转码包括HTML内容转码(针对innerHTML)、css属性转码(style属性)、事件处理转码、除事件处理和style属性外的其他属性转码、script转码。
2)过滤
对特殊字符进行过滤,包括上面的各项内容。
3)规则限制
例如URL限制域名,例如输入限制长度,例如使用规则引擎限定输入的内容(如<p>字母</p>)。
4)一些有趣的东东(可直接运行)
'XSS'.replace(/XSS/g,alert);
2,信息保护
当已经注入了,居于虚假伪造的行为(居于客户端的行为,例如构造form引导用户输入用户名密码)已经无法阻止,但仍然可以尝试保护用户在服务器的信息,防止通过获取到的信息冒充用户查看或修改用户信息。但这些措施都只是增加攻击难度,而不是终极武器。
1)只读cookie
2)验证客户端IP(可能影响正常用户)
xss攻击方法层出不穷,在有用户输入的情况下,小心再小心。(本文会不定时更新,直至篇幅大到可以新开一篇)