2012-06-16 43 views
0

我正在使用一個驗證庫,從輸入中刪除一些常見的XSS攻擊到我的Web應用程序。它工作正常,我也逃避了我提供的一切,以防止XSS攻擊。此代碼如何防範XSS攻擊?

該庫包含該線路XSS過濾過程的一部分:

// Protect query string variables in URLs => 901119URL5918AMP18930PROTECT8198 
str = str.replace(/\&([a-z\_0-9]+)\=([a-z\_0-9]+)/i, xss_hash() + '$1=$2'); 

xss_hash返回的隨機字母數字字符的字符串。基本上,它需要有一個查詢字符串的URL,並軋液有點:

> xss('http://example.com?something=123&somethingElse=456&foo=bar') 
'http://example.com?something=123eujdfnjsdhsomethingElse=456&foo=bar' 

除了有一個bug(它只是「保護」一個參數,不是所有的人),在我看來,整個事情是本身一個錯誤。

所以我的問題是:什麼樣的攻擊矢量是這種替換防護?

如果它沒有真正做任何事情,我想提交一個補丁到完全刪除它的項目。如果它合法地保護了圖書館的用戶,我想提交一個補丁來修復現有的錯誤。

回答

0

問題「保護查詢字符串變量」的代碼通過一個隨機字符串替換&分離URL參數,做一些其他的處理,將刪除或以其他方式撕裂&符號之前。正如Jay Shah指出的那樣,下面的代碼旨在替換查詢字符串&符號,但另一個錯誤阻止它按預期工作。

1

xss_hash返回一串隨機字母數字字符。

它們是絕對隨機的還是基於可計算的數據生成的?

它似乎是Security through obscurity:它試圖用xss_hash()替換所有的&,這樣查詢的可讀性就會降低。我猜是有一部分庫解除了這個問題(即將所有的xss_hash()的字符串作爲&進行解析)。

+0

'xss_hash'調用Math.random(),所以它肯定是隨機的。但是你是對的 - 我以前沒有看到它,但是在它下面有一行代碼,用'&'代替'xss_hash()'。但它不能正常工作,因爲'xss_hash'是隨機的... – chesles