2010-07-19 55 views
1

我正在使用htmlpurifier庫來消毒我的傳入參數。但它不會過濾空字節(例如%00)。我錯過了什麼或圖書館不支持它?我會被要求使用reg-ex嗎?感謝任何答案。在請求中過濾空字節

編輯:

我使用htmlpurifier與配置選項

$config = HTMLPurifier_Config::createDefault(); 
$config->set('Core', 'Encoding', "UTF-8"); 
$config->set('Cache', 'SerializerPath', "/webdirs/htmlpurify"); 

對於測試字符串

';</script><%00script>alert(845122)</script> 

我得到的輸出

';<%00script>alert(845122) 

回答

2

如通過HTMLPurifier/EncoderTest.php和HTMLPurifierTest.php,HTML過濾做清理出空字節:

$this->assertPurification("Null byte\0", "Null byte"); 

$this->assertCleanUTF8("null byte: \0", 'null byte: '); 

也許你應該張貼一些代碼?

編輯:你的編輯有點誤導;實際輸出的代碼是:

';&amp;lt;%00script&amp;gt;alert(845122) 

這是一串純文本,完全安全。百分號在HTML中沒有特殊含義。

如果您想在URL中放置一個字符串,請使用urlencode()。

+0

指揮官 - 謝謝你的回覆。我添加了一些代碼,但不確定是否足夠。讓我知道你是否需要任何其他細節。 – pinaki 2010-07-19 04:50:19

+0

問題是我無法使用html特殊字符作爲htmlpurifier的輸出。所以我在它上面運行一個html_entity_decode。現在這個值導致了這個問題。他們有什麼方法可以告訴htmlpurifier刪除腳本標記,即使在兩者之間有%00時也是如此? – pinaki 2010-07-20 14:30:46

+1

呃,再來?爲什麼不能使用HTML特殊字符作爲HTML Puriifer的輸出?(運行html_entity_decode是做錯事的錯誤方法,並且肯定會導致安全漏洞) – 2010-07-20 17:16:51

2

看起來像HTML Purifier正在過濾這個字符串,如果它出現在Javascript代碼中。

在Javascript中,您希望過濾出結束標記的任何出現,例如</script>,即使它出現在Javascript字符串文字中。否則,將</script>注入到一個字符串值中可以繞過一些不小心的過濾器,並跳出Javascript字符串和任意HTML。 HTML淨化器似乎已通過刪除該「標籤」正確地過濾了這一點。

在Javascript中的文字字符串中沒有傷害<%00script>,如果這確實是它出現的上下文。

還要注意,%00實際上並不是空字節或PHP,或者是HTML或JavaScript腳本。這是一個百分號,然後是兩個零。然而,在一個URL %00可能確實被解釋爲一個空字節,因此%00應該被過濾掉的URL。

+0

感謝您的回覆。我明白%00需要在網址中過濾。你可以請添加一個例子或鏈接如何在JavaScript端添加htmlpurifier?我只使用它在PHP方面。 – pinaki 2010-07-19 05:34:03