跨站腳本攻擊Cross-site scripting (XSS)是一種安全漏洞,攻擊者能夠利用這種漏洞在網站上注入惡意的客戶端代碼。當被攻擊者登錄網站時就會自動運行這些惡意代碼,從而,攻擊者能夠突破網站的訪問權限,冒充受害者。(轉自 MDN)。javascript
在如下2種狀況下,容易發生XSS攻擊:1)數據從一個不可靠的連接進入到一個web應用程序。2)沒有過濾掉惡意代碼的動態內容被髮送給web用戶。html
惡意內容通常包括 JavaScript,可是,有時候也會包括HTML,FLASH。XSS攻擊的形式千差萬別,可是,它們的共同點爲:將一些隱私數據像cookie、session發送給攻擊者,將受害者重定向到一個由攻擊者控制的網站,在受害者的機器上進行一些惡意操做。前端
xss 的攻擊分爲 3 種:反射型、持久性、DOM 型。java
反射型的攻擊通常出如今 URL 中。這是一種非持久性的攻擊,一般將 xss 代碼添加至請求 URL 中,做爲參數提交到服務器,服務器解析並響應。響應結果中若是包含 xss 代碼,則在瀏覽器中可能會被解析出來並執行。因此這種類型的 xss 攻擊分爲三個階段: url 中植入 xss 代碼,而後服務器端解析,最後瀏覽器解析並執行 xss 代碼。 node
舉個例子:web
http://localhost:8080/helloController/search?name=<script>alert("hey!")</script> http://localhost:8080/helloController/search?name=<img src='w.123' onerror='alert("hey!")'> http://localhost:8080/helloController/search?name=<a onclick='alert("hey!")'>點我</a>
使用 node.js 搭建的一個簡單服務器:chrome
var http = require('http'); var url = require('url'); var server = http.createServer((req, res) => { res.writeHead(200, { // 注意 Content-type 的值, // text/plain 中代碼會被包含在 <pre></pre>塊中而達不到攻擊效果 "Content-type":"text/html; charset=utf-8" }); var params = url.parse(req.url, true).query; if (params.name) res.write(`<div>${params.name}</div>`); res.end(); }); server.listen(9999);
使用 chromium 引擎的瀏覽器(chrome, 360 急速模式)均做過特殊處理,會進行攔截,firefox、ie 則沒有攔截,故建議在 firefox 下測試。數據庫
結果以下:瀏覽器
存儲型XSS,也叫持久型XSS,主要是將XSS代碼發送到服務器(無論是數據庫、內存仍是文件系統等。),而後在下次請求頁面的時候就不用帶上XSS代碼了。最典型的就是留言板XSS。用戶提交了一條包含XSS代碼的留言到數據庫。當目標用戶查詢留言時,那些留言的內容會從服務器解析以後加載出來。瀏覽器發現有XSS代碼,就當作正常的HTML和JS解析執行。XSS攻擊就發生了。安全
經常使用來獲取用戶信息,如:
張三發了一篇帖子,李四進行回覆:但內容倒是一段js腳本,這篇帖子被他人瀏覽的時候就會中招,例子中的只是一個alert(),但腳本能夠寫的比較複雜一點盜用用戶cookie等等操做。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <table border="1" width="80%"> <tr> <td>張三</td> <td>1樓</td> </tr> <tr> <td colspan="2">xss 攻擊三</td> </tr> <tr> <td>李四</td> <td>2樓</td> </tr> <tr> <td colspan="2">try it again<script>alert('持久化 xss')</script></td> </tr> </table> </body> </html>
另外,除了這種hacker還有個很慣用的伎倆,例如存儲型XSS生成一些誘人的圖片,文字(你懂的!),而後用戶去點擊的時候就能夠執行某些壞事,竊取信息或者誘導到釣魚網站,如:
< img onclick="window.location.href='http://www.baidu.com'" width='300' src='img/webwxgetmsgimg.jpg'/>
也能夠經過在<head></head>中植入重定向的scriptl來劫持流量實現惡意跳轉,如:
<script>window.location.href="http://www.baidu.com";</script>
1.不過怎麼講呢,千里之堤,只要有一個蟻穴,整個堤壩就不安全。安全攻防雙方的博弈永遠不會中止,所以誕生了信息安全這一個領域,並不斷髮展。或者說任何事物自誕生之初就有其自己的缺陷,因而就出現了矛盾雙方的不斷轉化。
2. Web For Pentester - 一個 web 腳本漏洞的演練平臺,介紹及安裝見:web for pentester介紹與安裝。