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

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