我有一個字符串,從用戶到達,然後使用CSS解析器插入到一個大的CSS塊。什麼字符可以安全地使用CSS值上下文避開?
CSS轉義可以使用\C
(其中C是字符),\HexOfC
(帶空格)或\6DigitHexOfC
來完成。
通常,所有字符都可以安全地轉義出來,並且CSS仍然按預期運行。以下作品:
div {
background: \23 f66;
}
<div>Test</div>
不過,我還是想的CSS屬性是作爲「乾淨」成爲可能,是因爲我想,例如,能夠查看URL和規則乾淨與檢查員。
有明顯不好的字符。 {};\*
都應該被轉義,因爲它們可以用來打破目前的規則。我正在管理一個白名單(除了允許的內容之外,所有的東西都會被轉義),而不是黑名單,除非黑名單允許所有內容。我現有的白名單字符是
'#', ',', '.', '(', ')', '-', '%', '+', '=', '/', ' ', ':', '\'', '"', '\n', '\r'
這裏有危險字符嗎?任何可以用來突破規則並影響CSS塊的其餘部分的東西。是否有不在這裏的字符會被不必要地逃脫? (字母數字字符默認情況下不會轉義)。
那如何幫助我?什麼阻止用戶插入邪惡的CSS? – 2014-10-04 12:17:41
他應該怎麼做?您可以通過過濾元素鍵來允許/禁止您希望的任何元素。 div的元素鍵和元素值本身只需要是A-Z,a-z,0-9,#和「。如果你手工轉換每個元素,則避免高級過濾。 – manf 2014-10-04 14:55:17