XSS 原理
反射型
用戶(hù)提交的數(shù)據(jù)中可以構(gòu)造代碼來(lái)執(zhí)行,從而實(shí)現(xiàn)竊取用戶(hù)信息等攻擊。需要誘使用戶(hù)“點(diǎn)擊”一個(gè)惡意鏈接,才能攻擊成功。
DOM 型
通過(guò)修改頁(yè)面的 DOM 節(jié)點(diǎn)形成的 XSS,稱(chēng)之為 DOM Based XSS。
DOM 型和反射型的區(qū)別
反射型 XSS:通過(guò)誘導(dǎo)用戶(hù)點(diǎn)擊,我們構(gòu)造好的惡意 payload 才會(huì)觸發(fā)的 XSS。反射型 XSS 的檢測(cè)我們?cè)诿看握?qǐng)求帶 payload 的鏈接時(shí)頁(yè)面應(yīng)該是會(huì)帶有特定的畸形數(shù)據(jù)的。
DOM 型:通過(guò)修改頁(yè)面的
DOM 節(jié)點(diǎn)形成的 XSS。DOM-based XSS 由于是通過(guò) js 代碼進(jìn)行 dom 操作產(chǎn)生的 XSS,所以在請(qǐng)求的響應(yīng)中我們甚至不一定會(huì)得到相應(yīng)的畸形數(shù)據(jù)。根本區(qū)別在我看來(lái)是輸出點(diǎn)的不同。
DOM 型 XSS 自動(dòng)化測(cè)試或人工測(cè)試
人工測(cè)試思路:找到類(lèi)似 document.write、innerHTML 賦值、outterHTML 賦值、window.location操作、寫(xiě) javascript:后內(nèi)容、eval、setTimeout 、setInterval 等直接執(zhí)行之類(lèi)的函數(shù)點(diǎn)。找到其變量,回溯變量來(lái)源觀(guān)察是否可控,是否經(jīng)過(guò)安全函數(shù)。自動(dòng)化測(cè)試參看道哥的博客,思路是從輸入入手,觀(guān)察變量傳遞的過(guò)程,最終檢查是否有在危險(xiǎn)函數(shù)輸出,中途是否有經(jīng)過(guò)安全函數(shù)。但是這樣就需要有一個(gè) javascript 解析器,否則會(huì)漏掉一些通過(guò) js 執(zhí)行帶入的部分內(nèi)容。
在回答這段問(wèn)題的時(shí)候,由于平時(shí)對(duì)客戶(hù)的檢測(cè)中,基本是憑借不同功能點(diǎn)的功能加上經(jīng)驗(yàn)和直覺(jué)來(lái)進(jìn)行檢測(cè),對(duì)不同類(lèi)型的 XSS 檢測(cè)方式實(shí)際上并沒(méi)有太過(guò)細(xì)分的標(biāo)準(zhǔn)化檢測(cè)方式,所以回答的很爛。
對(duì)于 XSS 怎么修補(bǔ)建議
輸入點(diǎn)檢查:對(duì)用戶(hù)輸入的數(shù)據(jù)進(jìn)行合法性檢查,使用 filter 過(guò)濾敏感字符或?qū)M(jìn)行編碼轉(zhuǎn)義,針對(duì)特定類(lèi)型數(shù)據(jù)進(jìn)行格式檢查。針對(duì)輸入點(diǎn)的檢查最好放在服務(wù)器端實(shí)現(xiàn)。
輸出點(diǎn)檢查:對(duì)變量輸出到 HTML 頁(yè)面中時(shí),對(duì)輸出內(nèi)容進(jìn)行編碼轉(zhuǎn)義,輸出在 HTML 中時(shí),對(duì)其進(jìn)行 HTMLEncode,如果輸出在 Javascript 腳本中時(shí),對(duì)其進(jìn)行 JavascriptEncode。對(duì)使用JavascriptEncode 的變量都放在引號(hào)中并轉(zhuǎn)義危險(xiǎn)字符,data 部分就無(wú)法逃逸出引號(hào)外成為 code 的一部分。還可以使用更加嚴(yán)格的方法,對(duì)所有數(shù)字字母之外的字符都使用十六進(jìn)制編碼。
此外,要注意在瀏覽器中,HTML 的解析會(huì)優(yōu)先于 Javascript 的解析,編碼的方式也需要考慮清楚,針對(duì)不同的輸出點(diǎn),我們防御 XSS 的方法可能會(huì)不同,這點(diǎn)可能在之后的文章會(huì)做下總結(jié)。除此之外,還有做 HTTPOnly 對(duì) Cookie 劫持做限制。
XSS 蠕蟲(chóng)的產(chǎn)生條件
正常情況下,一個(gè)是產(chǎn)生 XSS 點(diǎn)的頁(yè)面不屬于 self 頁(yè)面,用戶(hù)之間產(chǎn)生交互行為的頁(yè)面,都可能造成XSS Worm 的產(chǎn)生。
不一定需要存儲(chǔ)型 XSS
更多關(guān)于“網(wǎng)絡(luò)安全培訓(xùn)”的問(wèn)題,歡迎咨詢(xún)千鋒教育在線(xiàn)名師。千鋒教育多年辦學(xué),課程大綱緊跟企業(yè)需求,更科學(xué)更嚴(yán)謹(jǐn),每年培養(yǎng)泛IT人才近2萬(wàn)人。不論你是零基礎(chǔ)還是想提升,都可以找到適合的班型,千鋒教育隨時(shí)歡迎你來(lái)試聽(tīng)。