2011-06-21 60 views
10

我的目標是讓合作伙伴通過將自己的樣式錶鏈接通過URL參數傳遞給他們自己的外觀樣式。通過JavaScript加載第三方CSS是否存在安全性或瀏覽器兼容性問題?加載外部第三方CSS有沒有危險?

回答

13

在CSS文件中。

expressions(code),behavior:url(),url(javascript:code)-moz-binding:url()都有潛在的安全問題。

行爲不能跨域,以消除一些威脅,但一般來說,你確實需要以某種方式消毒它。

如果您允許用戶鏈接到外部服務器上的CSS,則沒有完整的驗證方式。服務器可以檢查服務器上的CSS文件以確保沒有惡意,但如果用戶更改了樣式表,該怎麼辦?你將不得不連續檢查樣式表。此外,服務器可能會嘗試繞過驗證方法向服務器IP地址提供不同的信息。

誠實地說,我會建議將CSS存儲在您自己的服務器上。簡單的運行它會拋出一個正則表達式解析器,從上面刪除可能的惡意代碼。

+1

+1對於具體的例子! –

+1

+1,但請記住現在表達式幾乎不受支持,行爲也是如此,即使您*可以*將JS加載到背景圖像中,或者它不會執行。 –

+3

爲了向後兼容,在IE8中執行表達式。考慮到IE的使用量最大,我肯定會認爲它們是安全威脅。 – William

3

只要你以某種方式驗證你應該是好的。

金科玉律如果用戶是唯一的人一起看自己的自定義CSS的能力不信任用戶

+2

關於如何驗證的建議將是有益的。 – William

+0

@Lime,這一切都取決於如果css文件正在保存到服務器,以及服務器實現是什麼等等 – Neal

+0

我們不會將它保存到服務器... – jarbot

2

,那麼就沒有任何真正的危險。他們可能會毀掉自己在網站上的體驗,但不會破壞其他人的體驗。

但是,如果他們的自定義CSS顯示給其他用戶,那麼他們可能會使用它來完全按照您的意圖搞亂網站的樣式。例如,他們可以簡單地從源頭抓取一些重要元素的id,並覆蓋它們以隱藏它們。

當然,只要您小心並妥善處理所有用戶輸入,就不應該面臨任何重大問題。

0

CSS表達式僅適用於IE 6-7,但允許使用內聯JS(通常用於計算要設置的值)。

例如:

/* set bgcolor based on time */ 
div.title { 
    background-color: expression((new Date()).getHours() % 2 ? "#B8D4FF" : "#F08A00"); 
} 

然而,這可能被用來做惡意的事情,我會說這是至少是值得一些測試。

+0

它可以在IE8中使用,具體取決於文檔類型 – William