XSS,即Cross Site Scripting,叫X是由于以前有了一个CSS。中文能够叫跨站脚本攻击。是前端工程师的一大威胁。javascript
XSS的根本,就是有恶意用户把代码植入了你要访问的页面中,从而控制你访问的页面,最终目的是获取你的信息。css
1,代码植入html
1)URL植入前端
恶人把构造好的URL,经过聊天工具或论坛或邮件等发布出去,若是有人访问这个URL,【或有触发条件】攻击就会执行。java
例如:http://126.com?frameurl=javascript%3Adocument.domain%20%3D%20%22126.com%22%3Balert%28parent.pagev%29%3Bvoid%280%29%3Bexpress
2)内容植入服务器
恶人把精心设计的内容保存到服务器,这些内容可能会被展现给别人看(例如我的博客的文章或昵称),一旦别人查看,【或有触发条件】攻击就会执行。cookie
2,控制页面的方式前端工程师
危险地带,以下代码的alert都可替换为任何危险代码,pagev为页面变量dom
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攻击方法层出不穷,在有用户输入的状况下,当心再当心。(本文会不定时更新,直至篇幅大到能够新开一篇)