2011-08-22 14 views
5

我正在通過將網站嵌入到其網站中的iframe中來使用該網站。我想給他們自定義內容樣式的能力,以便他們能夠適應他們網站的風格。是否包含外部CSS文件安全,還是可能導致代碼注入?

我的基本想法是讓他們給我一個CSS文件的URL,我應該在我給他們填充iframe的頁面中包含該文件。據我所知這是安全的,但我不是特別熟悉的CSS(尤其是新版本),所以我想驗證這一點。

有沒有什麼辦法可以讓別人構建一個CSS文件,讓他們將代碼注入我的網站或以其他方式訪問我的域名cookie等內容?這真的很安全,還是我需要提出一個不同的解決方案?

+1

我認爲你最好讓用戶將自定義樣式粘貼到textarea中,然後在將其包含在視圖中之前,您可以驗證它實際上是CSS並且沒有任何傷害。 –

回答

12

不,這是不安全的。 expression-moz-binding是已知的通過CSS在某些瀏覽器上執行腳本執行的方式。 LiveJournal遭受了非常公開的XSS攻擊,這是由於嵌入在用戶提供的CSS中的JavaScript引起的。

在Mozilla決定允許通過CSS執行任意JavaScript的情況下,沒有其他可行的解決方案。

Caja's attack vector wiki

精雕細琢的CSS樣式表可以在某些瀏覽器在全球範圍內執行unsanitized的JavaScript。

背景

CSS包括用於改變周邊標記並執行表達式幾種機制。

IE有一個擴展,允許執行任意的javascript。所述expression屬性在http://msdn2.microsoft.com/en-us/library/ms537634.aspx

說明使用動態屬性的功率,現在可以聲明屬性值不僅爲常數,也可作爲公式。 ...對於腳本,動態屬性可以是任何合法的JScript或Microsoft Visual Basic Sc​​ripting Edition(VBScript)語句。 http://msdn2.microsoft.com/en-us/library/ms533503.aspx

binding允許結合到外部指定的腳本 http://developer.mozilla.org/en/docs/CSS:-moz-binding & http://developer.mozilla.org/en/docs/XBL:XBL_1.0_Reference:Elements#binding

-moz-binding允許通過XML接口綁定(也使用數據:URL)的

假設

不可信代碼可以生成樣式元素或樣式屬性或以其他方式添加任意值y CSS規則並創建觸發這些規則的DOM元素。

版本

IE 5和後(但不IE 8或後面的 「標準模式」)。

Mozilla/Firefox,版本未知。

+0

真棒,謝謝你的所有背景。看起來我必須爲他們提供另一種機制來提供造型,我可以首先對其進行消毒。 現在要弄清楚如何清理CSS ... – Herms

+0

Caja項目保留CSS屬性和值的[白名單](http://code.google.com/p/google-caja/wiki/CajaWhitelists)有用。它還內置Java解析器和消毒器。 –

+0

Caja已移至Github,白名單可在此處找到:https://github.com/google/caja/tree/master/src/com/google/caja/郎/ CSS –

相關問題