2011-06-02 23 views
1

我正在構建一個允許用戶爲自己的配置文件輸入自定義CSS的應用程序(有點像MySpace,Friendster或Blogger)。您使用什麼樣的HTMLPurifier設置來淨化CSS?

問題是我很難找到通過CSS來淨化XSS攻擊的方法。我嘗試過使用HTMLPurifier,但它不起作用。例如:

html { 
    expression: alert('xss'); 
} 

body { 
    background-color: #FFF; 
} 

這將被HTMLPurifier允許。

我需要使用HTMLPurifier使其失效嗎?

謝謝!

更新
表達:推動通過CSS的攻擊的唯一途徑?如果是這樣,正則表達式比使用HTMLPurifier更有效嗎?

+1

爲什麼允許使用「表達」的第一位? – Quamis 2011-06-02 08:25:01

+0

由於用戶將自己輸入CSS,我不能保證他們不會使用它。 「表達式:」是通過CSS運行漏洞的唯一方式嗎?如果是這樣,那麼正則表達式會更有效率的正確嗎? – Nikko 2011-06-08 09:13:07

+0

此答案顯示如何配置HTMLPurifier和CSSTidy來消毒CSS:http://stackoverflow.com/questions/3241616/sanitize-user-defined-css-in-php – Synchro 2012-12-19 15:40:03

回答

2

HTML淨化器對HTML輸入進行操作,而不是CSS。也就是說,你可以通過將樣式表包裝在樣式標記中並打開%Filter.ExtractStyleBlocks來欺騙它來處理CSS樣式表。你需要安裝CSS Tidy。

更新。不可以。有很多方法可以提供CSS有效載荷,並且僅僅搜索表達式是不夠的。

0

$str = preg_replace("/expression[\s:\]+/", '', $str)會刪除表達式字符串。

在我的oppinnion中,簡單地「禁止」或以其他方式標記嘗試將這些東西輸入到您的網站的用戶可能會更好。 不知道其他方式來打破瀏覽器通過使用CSS,也許@愛德華可以在這裏幫助:)

+0

禁止它們將是一個很好的治療方法,尋找是一種預防措施。此外,當你有很多用戶擁有大量自定義頁面時,它不會被擴展。 – Nikko 2011-06-21 11:33:30

相關問題