2009-11-27 48 views
2

我想讓我的webapp用戶通過文本字段保存自定義CSS來修改其GUI的外觀。檢查/驗證用戶提供的CSS是不是邪惡

我想有一些邪惡的CSS黑客在那裏。我應該關心什麼?

+2

我不確定是否有任何CSS黑客(邪惡品種),我知道這不是你問的,但你有沒有考慮創建一個選項頁面,他們可以改變顏色等? – 2009-11-27 14:26:33

+1

@ILMV在Internet Explorer中,CSS可以運行Javascript「表達式」。我不知道它有多邪惡,但比對不起更安全:) – 2009-11-27 14:57:47

回答

7

一個解決方案是讓你通過一些編輯器提供用戶選項,允許他們選擇各種元素的顏色/大小。然後根據用戶提供的選項自行生成CSS。

這可以防止任何非標準的CSS,或者你不希望用來保存的CSS。

+0

+1,正是我在想的:) – 2009-11-27 14:27:28

+1

好的答案。不要忘記你仍然需要驗證所有的輸入!如果它是一種顏色,請確保它是3或6個十六進制數字,而不是'fff; font-size:500px' – DisgruntledGoat 2009-11-27 14:35:40

+0

或者,如果將它嵌入到HTML頁面中,#fff;}'。 – Boldewyn 2009-11-27 14:44:23

0

如果您的用戶只能修改他們自己的CSS而不是其他用戶,那麼風險是什麼? CSS只會送給他們,所以在最壞的情況下,他們可以自己破解,不是?

+0

好吧,如果他的網站面向普通人羣,而不僅僅是程序員/設計人員,那麼非專家用戶可能會從網絡上下載一些免費的CSS模板,從而使機器處於風險之中。 – 2011-05-09 03:14:03

2

如果允許用戶直接在網站上使用定製CSS,你所要求的黑客接管。你實際上使主題系統不太可用,因爲只有知道CSS的人才能做到這一點。除非您的網站專門針對基於網絡的程序員,否則最好製作一組用戶可以選擇的主題。

您還可以在您的網站上製作一組工具,允許用戶通過用戶界面而不是直接通過CSS更改頁面上的特定樣式。這將允許更多的用戶更靈活地設置他們的頁面風格,但通常需要花費更多的開發時間 - 除非您使用CMS,並且您的特定CMS允許在覈心或插件中輕鬆實現此功能。

希望這會有所幫助。

+0

我不太清楚,爲什麼它會成爲餅乾的邀請。如果您將CSS存儲在數據庫中(正確引用)並將其嵌入到HTML中(正確編碼),*和*僅將其發送給上傳的人,那麼安全漏洞是什麼? – Boldewyn 2009-11-27 14:43:13

+0

首先,如果其他用戶訪問他們的頁面,安全漏洞就會發揮作用。例如,MySpace上的釣魚攻擊要求輸入一個人的密碼,然後將他們的頁面變成一個巨大的div,在點擊後重定向到釣魚頁面。這個頁面稍後變成了一個重定向,通過人們的myspace銷售另一個頁面。 其次,你會有人搞砸他們的網頁(可能是一個div佔據整個頁面大小?),並希望你修復它。 但是,如果沒有人看到他們的頁面 - 出現錯誤的可能性很小。我是那種不會冒險的類型 – monokrome 2009-11-27 15:12:13

1

雖然我會去Zeus的答案,你可以使用CSS解析器(搜索SO,有各種問題)並檢查所有輸入與覈准屬性列表(color,background等)。

3

只有一件事,我可以想到:CSS表達式(但是,只在IE中計算)。這些允許CSS文件中的JavaScript,所以我會去除任何類似於

property: expression(...); 

或者只是拋出「不允許」錯誤。但是,如果您將CSS提供給完全放置在首位的用戶,那麼他負責,如果他自己引入了XSS漏洞。

在任何其他情況下:使用Zeus的解決方案。

+0

還有一個額外的漏洞,那就是爲背景圖片引用文件等等。我知道有人使用CSS技巧來繞過XHR的相同域限制,背景圖像或其他。所以如果你要走這條路線,你可能會想排除任何CSS規則,比如「url()」。 我同意最好的解決方案是不要使它成爲自由形式,讓用戶根據每個選擇器/樣式指定輸入。這不是編碼,但更安全。 – Bialecki 2009-11-27 15:20:06