描述: 目標(biāo)使用存在漏洞的JQuery版本。jQuery是一個(gè)快速、簡(jiǎn)潔的JavaScript框架,具有獨(dú)特的鏈?zhǔn)秸Z(yǔ)法和短小清晰的多功能接口;具有高效靈活的css選擇器,并且可對(duì)CSS選擇器進(jìn)行擴(kuò)展;擁有便捷的插件擴(kuò)展機(jī)制和豐富的插件。然而在JQuery的諸多發(fā)行版本中,存在著DOM-based XSS(跨站腳本攻擊的一種)漏洞,易被攻擊者利用??缯灸_本攻擊漏洞,英文名稱Cross Site Scripting,簡(jiǎn)稱CSS又叫XSS。它指的是惡意攻擊者向Web頁(yè)面中插入一段惡意代碼,當(dāng)用戶瀏覽該頁(yè)面時(shí),嵌入到Web頁(yè)面中的惡意代碼就會(huì)被執(zhí)行,從而達(dá)到惡意攻擊者的特殊目的。
危害:
攻擊者可根據(jù)目標(biāo)使用的JQuery版本判斷是否存在XSS漏洞,并構(gòu)造惡意代碼插入目標(biāo)頁(yè)面,當(dāng)用戶瀏覽該頁(yè)面時(shí),嵌入的惡意代碼就會(huì)執(zhí)行,可能會(huì)造成Cookie被盜取進(jìn)而引發(fā)更多損失。
解決方案:
方案一:
1. 過(guò)濾用戶輸入的內(nèi)容,檢查用戶輸入的內(nèi)容中是否有非法內(nèi)容。如<>(尖括號(hào))、"(引號(hào))、 '(單引號(hào))、%(百分比符號(hào))、;(分號(hào))、()(括號(hào))、&(& 符號(hào))、+(加號(hào))等。
2. 嚴(yán)格控制輸出
可以利用下面這些函數(shù)對(duì)出現(xiàn)xss漏洞的參數(shù)進(jìn)行過(guò)濾
1、htmlspecialchars() 函數(shù),用于轉(zhuǎn)義處理在頁(yè)面上顯示的文本。
2、htmlentities() 函數(shù),用于轉(zhuǎn)義處理在頁(yè)面上顯示的文本。
3、strip_tags() 函數(shù),過(guò)濾掉輸入、輸出里面的惡意標(biāo)簽。
4、header() 函數(shù),使用header("Content-type:application/json"); 用于控制 json 數(shù)據(jù)的頭部,不用于瀏覽。
5、urlencode() 函數(shù),用于輸出處理字符型參數(shù)帶入頁(yè)面鏈接中。
6、intval() 函數(shù)用于處理數(shù)值型參數(shù)輸出頁(yè)面中。
7、自定義函數(shù),在大多情況下,要使用一些常用的 html 標(biāo)簽,以美化頁(yè)面顯示,如留言、小紙條。那么在這樣的情況下,要采用白名單的方法使用合法的標(biāo)簽顯示,過(guò)濾掉非法的字符。
各語(yǔ)言示例:
PHP的htmlentities()或是htmlspecialchars()。
Python的cgi.escape()。
ASP的Server.HTMLEncode()。
ASP.NET的Server.HtmlEncode()或功能更強(qiáng)的Microsoft Anti-Cross Site Scripting Library
Java的xssprotect(Open Source Library)。
Node.js的node-validator。
方案二:使用開(kāi)源的漏洞修復(fù)插件。( 需要站長(zhǎng)懂得編程并且能夠修改服務(wù)器代碼 )