淺析XSS與XSSI有何異同
Michael Cobb:自上世紀90年代,攻擊者就已經(jīng)開始利用XSS漏洞,并且,最主要的網(wǎng)站(例如谷歌、雅虎和Facebook)都在一定程度上受到過XSS漏洞的影響。與大多數(shù)應用層攻擊(例如SQL注入),基于XSS的攻擊會攻擊應用的用戶,而不是應用或服務器。這些攻擊的工作原理是注入代碼(通常例如JavaScript客戶端腳本)到Web應用的輸出。大部分網(wǎng)站有很多注入點,包括搜索域、cookies和表格。雖然這些惡意腳本不能直接感染服務器端信息,它們?nèi)匀豢梢云茐木W(wǎng)站的安全性。通過使用Document Object Model操作來更改表格值,改變網(wǎng)頁的外觀或切換表格操作以張貼提交的數(shù)據(jù)到攻擊者的網(wǎng)站,攻擊者可以竊取數(shù)據(jù)、控制用戶的會話、運行惡意代碼或用作網(wǎng)絡釣魚欺詐的一部分。
什么是XSS?
跨站腳本攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS。惡意攻擊者往Web頁面里插入惡意Script代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的Script代碼會被執(zhí)行,從而達到惡意攻擊用戶的特殊目的。
什么是XSSI?
XSSI是XSS的一種形式,它利用了這樣一個事實,即瀏覽器不會阻止網(wǎng)頁加載圖像和文字等資源,這些資源通常托管在其他域和服務器。例如,腳本可能提供攻擊者需要的功能,幫助創(chuàng)建特定的頁面—很多網(wǎng)站包含托管在的JavaScript庫jQuery。
XSS與XSSI異同
然而,這種包含可能被利用來從一個域名讀取用戶數(shù)據(jù)—當用戶正在訪問另一個域名時。例如,如果ABC銀行有一個腳本用于讀取用戶的私人賬戶信息,攻擊者可以在其自己的惡意網(wǎng)站包含這個腳本,當ABC銀行的客戶訪問攻擊者的網(wǎng)站時,攻擊者就可以從ABC銀行的服務器提取用戶信息。
開發(fā)者可以部署多種措施來抵御XSSI攻擊。其中一種方法是向用戶提供獨特的不可預測的授權(quán)令牌,在服務器響應任何請求之前,需要發(fā)送回該令牌作為額外的HTTP參數(shù)。腳本應該只能響應POST請求,這可以防止授權(quán)令牌作為GET請求中的URL參數(shù)被暴露,同時,這可以防止腳本通過腳本標簽被加載。瀏覽器可能會重新發(fā)出GET請求,這可能會導致一個操作會執(zhí)行一次以上,而重新發(fā)出的POST請求需要用戶的同意。
在處理JSON請求時,在響應中增加非可執(zhí)行前綴,例如“\n”,以確保腳本不可執(zhí)行。在相同域名運行的腳本可以讀取響應內(nèi)容以及刪除前綴,但在其他域名運行的腳本則不能。此外,開發(fā)者還應該避免使用JSONP(具有填充功能的JSON)來從不同域名加載機密數(shù)據(jù),因為這會允許釣魚網(wǎng)站收集數(shù)據(jù)。同時,發(fā)送響應表頭“X-Content-Type-Options: nosniff”也將幫助保護IE和谷歌Chrome用戶免受XSSI攻擊。
為了應對XSS攻擊,可在HTTP Content-Type響應表頭或者HTML代碼中meta標簽中http-equiv屬性中指定CHARSET,讓瀏覽器不會解譯其他字符集的特殊字符編碼。對于使用ASP.NET開發(fā)網(wǎng)站的開發(fā)者,微軟Anti-Cross Site Scripting Library可以幫助保護Web應用抵御跨站腳本漏洞。
現(xiàn)在有很多開源漏洞掃描工具可供開發(fā)者使用,以測試其代碼是否容易遭受XSS攻擊,例如Vega、Wapiti、OWASP的Zed Attack Proxy和Skipfish。企業(yè)應該定期對網(wǎng)站進行掃描,同時,在底層代碼變更或依靠第三方庫的功能集成到各種網(wǎng)頁時,也應該掃描網(wǎng)站。
讀完此文,大家應該知道兩者的區(qū)別在哪了。