|
二、XSS轉(zhuǎn)碼引發(fā)的過(guò)濾問(wèn)題 ??? 有攻就有防,網(wǎng)站程序員肯定不會(huì)放任大家利用XSS,所以他們常會(huì)過(guò)濾類似javascript的關(guān)鍵字符,讓大家構(gòu)造不了自己的XSS,我這里就撿兩個(gè)被忽略慣了的字符來(lái)說(shuō),它們是"&"和"\".首先來(lái)說(shuō)說(shuō)"&"字符,玩過(guò)SQL注入的都知道,注入的語(yǔ)句可以轉(zhuǎn)成16進(jìn)制再賦給一個(gè)變量運(yùn)行,XSS的轉(zhuǎn)碼和這個(gè)還真有異曲同工之妙,原因是我們的IE瀏覽器默認(rèn)采用的是UNICODE編碼,HTML編碼可以用&#ASCII方式來(lái)寫,這種XSS轉(zhuǎn)碼支持10進(jìn)制和16進(jìn)制,SQL注入轉(zhuǎn)碼是將16進(jìn)制字符串賦給一個(gè)變量,而XSS轉(zhuǎn)碼則是針對(duì)屬性所賦的值,下面我就拿<img src="javascript:alert('XSS');">示例:
??? <img src="javascript:alert('XSS');"> //10進(jìn)制轉(zhuǎn)碼 如圖三
? ??? <img src="javascript:alert('XSS');"> //16進(jìn)制轉(zhuǎn)碼。 ??? 這個(gè)&#分隔符還可以繼續(xù)加0變成“j” ,“j” ,“j” ,“j”等形式。 ??? 而這個(gè)"\"字符卻暴露了一個(gè)嚴(yán)重的XSS 0DAY漏洞,這個(gè)漏洞和CSS(Cascading Style Sheets)層疊樣式表有很大的關(guān)聯(lián),下面我就來(lái)看看這個(gè)漏洞,先舉個(gè)javascript的eval 函數(shù)的例子,官方是這樣定義這個(gè)函數(shù): ??? eval(codeString),必選項(xiàng) codestring 參數(shù)是包含有效 JScript 代碼的字符串值。這個(gè)字符串將由 JScript 分析器進(jìn)行分析和執(zhí)行。 ??? 我們的JavaScript中的"\"字符是轉(zhuǎn)義字符,所以可以使用"\"連接16進(jìn)制字符串運(yùn)行代碼
??? <SCRIPT LANGUAGE="JavaScript">
恐怖的是樣式表也支持分析和解釋"\"連接的16進(jìn)制字符串形式,瀏覽器能正常解釋。下面我們來(lái)做個(gè)實(shí)驗(yàn): ??? 寫一個(gè)指定某圖片為網(wǎng)頁(yè)背景的CSS標(biāo)記:
??? <html>
??? 保存為HTM,瀏覽器打開(kāi)顯示正常。 ??? 轉(zhuǎn)換background屬性值為"\"連接的16進(jìn)制字符串形式,瀏覽器打開(kāi)同樣顯示正常。
??? <html>
??? 在文章第一部分我已經(jīng)說(shuō)過(guò)XSS的觸發(fā)條件包括訪問(wèn)文件的標(biāo)記屬性,因此我們不難構(gòu)造出 ??? <img STYLE="background-image: url(javascript:alert('XSS'))"> ??? 這樣的XSS語(yǔ)句。有了實(shí)驗(yàn)的結(jié)果,我們又能對(duì)CSS樣式表的標(biāo)記進(jìn)行XSS轉(zhuǎn)碼,瀏覽器將幫我們解釋標(biāo)記內(nèi)容,XSS語(yǔ)句示例: ??? <img STYLE="background-image: \75\72\6c\28\6a\61\76\61\73\63\72\69\70\74\3a\61\6c\65\72\74\28\27\58\53\53\27\29\29"> 看圖四
? ??? 編者語(yǔ): XSS攻擊以及的可怕性及靈活性深受黑客的喜愛(ài)。爭(zhēng)對(duì)XSS攻擊,編者給普通瀏覽網(wǎng)頁(yè)用戶及WEB應(yīng)用開(kāi)發(fā)者給出以下的 安全 建議: ??? web用戶 ??? ? 1.在電子郵件或者即時(shí)通訊 軟件 中點(diǎn)擊鏈接時(shí)需要格外小心:留心可疑的過(guò)長(zhǎng)鏈接,尤其是它們看上去包含了HTML代碼。如果對(duì)其產(chǎn)生懷疑,可以在瀏覽器地址欄中手工輸入域名,而后通過(guò)該頁(yè)面中的鏈接瀏覽你所要的信息。 ??? ? 2.對(duì)于XSS漏洞,沒(méi)有哪種web瀏覽器具有明顯的安全優(yōu)勢(shì)。也就是Firefox也同樣不安全。為了獲得更多的安全性,可以安裝一些瀏覽器插件:比如Firefox的NoScript或者Netcraft工具條。 ??? ? 3.世界上沒(méi)有“100%的有效”。盡量避免訪問(wèn)有問(wèn)題的站點(diǎn):比如提供hack信息和工具、破解軟件、成人照片的網(wǎng)站。這些類型的網(wǎng)站會(huì)利用瀏覽器漏洞并危害 操作系統(tǒng) 。 ??? web應(yīng)用開(kāi)發(fā)者 ??? ? 1.對(duì)于開(kāi)發(fā)者,首先應(yīng)該把精力放到對(duì)所有用戶提交內(nèi)容進(jìn)行可靠的輸入驗(yàn)證上。這些提交內(nèi)容包括URL、查詢關(guān)鍵字、http頭、post數(shù)據(jù)等。只接受在你所規(guī)定長(zhǎng)度范圍內(nèi)、采用適當(dāng)格式、你所希望的字符。阻塞、過(guò)濾或者忽略其它的任何東西。 ??? ? 2.保護(hù)所有敏感的功能,以防被bots自動(dòng)化或者被第三方網(wǎng)站所執(zhí)行。實(shí)現(xiàn)session標(biāo)記(session tokens)、CAPTCHA系統(tǒng)或者HTTP引用頭檢查。 ??? ? 3.如果你的web應(yīng)用必須支持用戶提供的HTML,那么應(yīng)用的安全性將受到災(zāi)難性的下滑。但是你還是可以做一些事來(lái)保護(hù)web站點(diǎn):確認(rèn)你接收的HTML內(nèi)容被妥善地格式化,僅包含最小化的、安全的tag(絕對(duì)沒(méi)有JavaScript),去掉任何對(duì)遠(yuǎn)程內(nèi)容的引用(尤其是樣式表和JavaScript)。為了更多的安全,請(qǐng)使用httpOnly的cookie。 |
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
