是不是觉得黑客很神秘,仿佛一个幽灵般来无影去无踪,做的事情又那么神奇,能盗别人的账户,能让别人的网站错乱或者瘫痪,还能更改学习成绩…其实这些怎么弄的,我也不知道~~
最近在慕课网发现一个好玩的课程,Web安全——XSS,里面讲到了XSS,顺便提了一句CSRF,然后我就顺着去了解了一下。
认识
XSS:Cross Site Scripting 跨站脚本攻击,通过插入恶意脚本,实现对用户浏览器的控制。
CSRF:Cross-site Request Forgery 跨站请求伪造,攻击者盗用用户身份,以用户名义发送恶意请求。
XSS
XSS可以盗用cookie,破坏页面结构,插入恶意内容,DDOS(分布式拒绝服务攻击)攻击效果。通过XSS方式注入内容引诱触发CSRF攻击。
原理 :恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
手段
(1).反射型:发出请求时,XSS代码出现在URL中,作为输入提交到服务器,服务端解析后响应,XSS代码随响应代码一起返回给浏览器,最后浏览器解析执行XSS代码。
www.example.com/?url=<img src='' onerror='alert(1)'>//自动触发 www.example.com/?url=<p onclick='alert(1)'>点我</p>//引诱触发 www.example.com/?url=<iframe src='baidu.com'></iframe> //chrome浏览器会默认拦截,如果设置'X-XSS-Protection:0'则取消默认拦截
|
(2).存储型:提交的XSS代码会存储在服务端(数据库/内存/文件系统等),下次请求目标页面时不用再提交XSS代码。
防范
1、编码:避免原样保存,对用户输入的数据进行HTML Entity编码
function htmlEnCode(str){ var s=''; if(str.length==0) return ''; s=str.replace(/&/g,'>'); s=s.replace(/</g,'<'); s=s.replace(/>/g,'>'); s=s.replace(/\s/g,' ');空格 s=s.replace(/\'/g,''');'' s=s.replace(/\"/g,'"');"" s=s.replace(/\n/g,'<br>');换行符 return s; }
|
2、过滤:原样显示内容时先过滤非法内容,移除用户上传的DOM属性,如onerror、onclick、onmouseover等,移除用户上传的style节点、script节点、iframe节点等。
3、校正:避免恶意破坏页面DOM,避免直接对HTML Entity解码,使用DOM Parse,校正不配对的DOM标签。
CSRF
原理
登录受信任网站A,并在本地生成Cookie,在不登出A的情况下,访问危险网站B。
手段
1、捕获URL实现攻击
<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000> //危险网站B页面通过img标签来实现GET请求,这个只能针对GET请求
|
2、针对未指定POST请求
<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000> //如果受信任网站A没有指定必须POST,则危险网站B页面仍然能通过img标签来实现GET请求
|
3、针对指定POST请求
<html> <head> <script type="text/javascript"> function steal() { iframe = document.frames["steal"]; iframe.document.Submit("transfer"); } </script> </head> <body onload="steal()"> <iframe name="steal" display="none"> <form method="POST" name="transfer" action="http://www.myBank.com/Transfer.php"> <input type="hidden" name="toBankId" value="11"> <input type="hidden" name="money" value="1000"> </form> </iframe> </body> </html>
|
防范
1、请求符合HTTP规范,用GET获取资源,用POST更新资源
2、服务端防范:Cookie Hashing、验证码、One-Time Tokens(不同的表单包含一个不同的伪随机值)
参考:
1.https://www.imooc.com/learn/812
2.http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html