回答
一個解決方案是讓你通過一些編輯器提供用戶選項,允許他們選擇各種元素的顏色/大小。然後根據用戶提供的選項自行生成CSS。
這可以防止任何非標準的CSS,或者你不希望用來保存的CSS。
+1,正是我在想的:) – 2009-11-27 14:27:28
好的答案。不要忘記你仍然需要驗證所有的輸入!如果它是一種顏色,請確保它是3或6個十六進制數字,而不是'fff; font-size:500px' – DisgruntledGoat 2009-11-27 14:35:40
或者,如果將它嵌入到HTML頁面中,#fff;}'。 – Boldewyn 2009-11-27 14:44:23
如果您的用戶只能修改他們自己的CSS而不是其他用戶,那麼風險是什麼? CSS只會送給他們,所以在最壞的情況下,他們可以自己破解,不是?
好吧,如果他的網站面向普通人羣,而不僅僅是程序員/設計人員,那麼非專家用戶可能會從網絡上下載一些免費的CSS模板,從而使機器處於風險之中。 – 2011-05-09 03:14:03
在別人的東西說,檢查它們是否有效的CSS:http://jigsaw.w3.org/css-validator/
如果允許用戶直接在網站上使用定製CSS,你所要求的黑客接管。你實際上使主題系統不太可用,因爲只有知道CSS的人才能做到這一點。除非您的網站專門針對基於網絡的程序員,否則最好製作一組用戶可以選擇的主題。
您還可以在您的網站上製作一組工具,允許用戶通過用戶界面而不是直接通過CSS更改頁面上的特定樣式。這將允許更多的用戶更靈活地設置他們的頁面風格,但通常需要花費更多的開發時間 - 除非您使用CMS,並且您的特定CMS允許在覈心或插件中輕鬆實現此功能。
希望這會有所幫助。
我不太清楚,爲什麼它會成爲餅乾的邀請。如果您將CSS存儲在數據庫中(正確引用)並將其嵌入到HTML中(正確編碼),*和*僅將其發送給上傳的人,那麼安全漏洞是什麼? – Boldewyn 2009-11-27 14:43:13
首先,如果其他用戶訪問他們的頁面,安全漏洞就會發揮作用。例如,MySpace上的釣魚攻擊要求輸入一個人的密碼,然後將他們的頁面變成一個巨大的div,在點擊後重定向到釣魚頁面。這個頁面稍後變成了一個重定向,通過人們的myspace銷售另一個頁面。 其次,你會有人搞砸他們的網頁(可能是一個div佔據整個頁面大小?),並希望你修復它。 但是,如果沒有人看到他們的頁面 - 出現錯誤的可能性很小。我是那種不會冒險的類型 – monokrome 2009-11-27 15:12:13
雖然我會去Zeus的答案,你可以使用CSS解析器(搜索SO,有各種問題)並檢查所有輸入與覈准屬性列表(color
,background
等)。
只有一件事,我可以想到:CSS表達式(但是,只在IE中計算)。這些允許CSS文件中的JavaScript,所以我會去除任何類似於
property: expression(...);
或者只是拋出「不允許」錯誤。但是,如果您將CSS提供給完全放置在首位的用戶,那麼他負責,如果他自己引入了XSS漏洞。
在任何其他情況下:使用Zeus的解決方案。
還有一個額外的漏洞,那就是爲背景圖片引用文件等等。我知道有人使用CSS技巧來繞過XHR的相同域限制,背景圖像或其他。所以如果你要走這條路線,你可能會想排除任何CSS規則,比如「url()」。 我同意最好的解決方案是不要使它成爲自由形式,讓用戶根據每個選擇器/樣式指定輸入。這不是編碼,但更安全。 – Bialecki 2009-11-27 15:20:06
- 1. AutoCompleteBox是邪惡的
- 2. 子查詢是否是邪惡的?
- 3. 以上CSS是必要的邪惡?
- 4. Flurry User ID是否是邪惡的?
- 5. 許可證檢查的電話之家被認爲是邪惡的
- 6. Django包括 - 他們是邪惡的?
- 7. RJS是邪惡的,爲什麼?
- 8. 爲什麼JFormattedTextField是邪惡的?
- 9. 是否有具體的用戶故事場景邪惡?
- 10. 什麼時候(如果有的話)是eval不是邪惡的?
- 11. 邪惡的pdf css邊界框?
- 12. 這不是驗證用戶
- 13. 如何檢查用戶ID是否驗證或不圖表api
- 14. 邪惡模式下的Smex
- 15. 檢測Firebase用戶身份驗證提供程序
- 16. 檢查用戶是有效的Windows身份驗證MVC3
- 17. 檢查是否存在用戶jQuery的驗證,Ajax和codeigneter
- 18. 檢查URL是通過身份驗證的用戶
- 19. 檢查用戶是否使用Cognito進行了身份驗證
- 20. 檢查用戶是否使用Firebase驗證android
- 21. 驗證上傳的.FLA不是惡意的
- 22. 爲什麼Class.newInstance()「邪惡」?
- 23. 檢查用戶是否在db中驗證
- 24. 驗證LDAP用戶並檢查它們是否屬於組
- 25. 檢查用戶名是否存在與bvalidator(jQuery驗證插件)
- 26. 心跳來檢查用戶是否通過身份驗證?
- 27. 檢查用戶是否通過twitter api在twitter中驗證
- 28. 檢查Facebook用戶是否已通過身份驗證
- 29. Emacs的邪惡領袖和邪惡的書呆子,評議衝突
- 30. 爲什麼通過newCachedThreadPool創建的ExecutorService是邪惡的?
我不確定是否有任何CSS黑客(邪惡品種),我知道這不是你問的,但你有沒有考慮創建一個選項頁面,他們可以改變顏色等? – 2009-11-27 14:26:33
@ILMV在Internet Explorer中,CSS可以運行Javascript「表達式」。我不知道它有多邪惡,但比對不起更安全:) – 2009-11-27 14:57:47