為什麼主流網站無法捕獲 XSS 漏洞?

OneAPM官方技術部落格發表於2016-04-22

二十多年來,跨站指令碼(簡稱 XSS)漏洞一直是主流網站的心頭之痛。為什麼過了這麼久,這些網站還是對此類漏洞束手無策呢?

對於最近 eBay 網站曝出的跨站指令碼漏洞,你有什麼想法?為什麼會出現這樣的漏網之魚?一個如此大規模的網站,不應該具備可靠的閘道器安全技術以阻止任何情況下的 XSS 攻擊麼?

即便從上世紀 90 年代開始,跨站指令碼漏洞就已經為人們所熟知。時至今日,它仍在貽害為數不少的網站。大多數主流網站,包括谷歌,CNN,PayPal 以及 Facebook,都曾受過 XSS 漏洞的影響。該漏洞也常年出現在 CWE/SANS 前 25 個最危險的程式設計錯誤、OWASP 前 10 個最致命的 Web 應用安全風險之類的榜單。

XSS 攻擊與大多數應用層攻擊(諸如 SQL 注入攻擊)不同,因為它攻擊的是應用的使用者,而非應用本身或應用伺服器。這類攻擊會往 Web 應用的內容中注入程式碼,通常是 JavaScript 之類的客戶端程式碼。大多數網站都有許許多多的注入位置,包括搜尋框、反饋表格,cookie 以及論壇等。藉助 XSS 漏洞,黑客可以竊取資料,控制使用者的會話,執行惡意程式碼,或操縱受害使用者瀏覽器中顯示的內容。

像 eBay 這樣的網站,幾乎完全基於使用者產生的內容,通常在使用者的專案描述部分包含許多活動內容(Active Content),比如 JavaScript 和 Flash。由於網站必須與使用者互動,接收來自使用者的輸入、返回資料,這意味著,攻擊者也可以直接與網站互動,從而穿破傳統的外圍安全防護。除非所有使用者提供的內容都經過嚴格審查,XSS 攻擊程式碼就有可能注入拍賣清單頁面,從而影響每個訪問該頁面的使用者。使用者輸入的所有內容(表單資料、cookie、郵件、檔案、圖片等)都應該視為不可信任,需要經歷審查,刪除其中可能被惡意使用的字元與字串,才能繼續執行指令碼或傳給資料庫。

導致 eBay 這樣的大網站持續受到 XSS 攻擊的一大原因,是這些網站過於複雜,實時生成的網頁常常會包含許多外部站點的內容。這使得測試階段,列舉使用者與應用互動的所有排列組合變得不太現實,繼而導致 XSS 漏網之魚的出現。

話雖如此,eBay 居然沒有一套更為嚴格的程式碼審查流程(近幾周發現了多個 XSS 漏洞),還是有些令人吃驚。用於測試 XSS 漏洞的工具其實很多,它們都能在程式碼上線之前有效查詢漏洞。此外,開發者也可以使用安全控制庫(諸如 OWASP 的企業安全 API 或微軟的反跨站指令碼庫),而不需要自己編寫驗證檢查。而且,諸如執行時應用自我保護(RASP)等閘道器安全技術也有助於檢測並防禦對 XSS 漏洞的攻擊。因此,如此主流的一個大網站(eBay),卻沒能有效防禦如此廣為人知的安全漏洞,實在是有些讓人失望。

如今,多樣化的攻擊手段層出不窮,傳統安全解決方案越來越難以應對網路安全攻擊。OneRASP 實時應用自我保護技術,可以為軟體產品提供精準的實時保護,使其免受漏洞所累。想閱讀更多技術文章,請訪問 [OneAPM 官方技術部落格]。

本文轉自 OneAPM 官方部落格

相關文章