2014-10-02 29 views
6

我有一個字符串,從用戶到達,然後使用CSS解析器插入到一個大的CSS塊。什麼字符可以安全地使用CSS值上下文避開?

CSS轉義可以使用\C(其中C是字符),\HexOfC (帶空格)或\6DigitHexOfC來完成。

通常,所有字符都可以安全地轉義出來,並且CSS仍然按預期運行。以下作品:

div { 
 
    background: \23 f66; 
 
}
<div>Test</div>

不過,我還是想的CSS屬性是作爲「乾淨」成爲可能,是因爲我想,例如,能夠查看URL和規則乾淨與檢查員。


有明顯不好的字符。 {};\*都應該被轉義,因爲它們可以用來打破目前的規則。我正在管理一個白名單(除了允許的內容之外,所有的東西都會被轉義),而不是黑名單,除非黑名單允許所有內容。我現有的白名單字符是

'#', ',', '.', '(', ')', '-', '%', '+', '=', '/', ' ', ':', '\'', '"', '\n', '\r' 

這裏有危險字符嗎?任何可以用來突破規則並影響CSS塊的其餘部分的東西。是否有不在這裏的字符會被不必要地逃脫? (字母數字字符默認情況下不會轉義)。

回答

1

而不是消毒輸入,你可以簡單地讓元素被轉移。

基本上是一個客戶端生成structur文件:

[ 
    MyDiv: { # Key 
     background: "#FFFFFF" # Element 
    } 
] 

在這種情況下,你只需要創建一個文件。

無效代碼:

​​3210

生成元應該很容易。

每個元素只是

S:= element-key:element-value;

然後,您也可以將特殊命令列入白名單。

如果你想保持消毒,看看這裏: http://www.w3.org/TR/CSS21/grammar.html#scanner

+0

那如何幫助我?什麼阻止用戶插入邪惡的CSS? – 2014-10-04 12:17:41

+0

他應該怎麼做?您可以通過過濾元素鍵來允許/禁止您希望的任何元素。 div的元素鍵和元素值本身只需要是A-Z,a-z,0-9,#和「。如果你手工轉換每個元素,則避免高級過濾。 – manf 2014-10-04 14:55:17

相關問題