2010-02-09 28 views
1

我有一個輸入,用戶可以鍵入html或純文本。例如,當用戶複製&粘貼MS Word中的文本時,它會生成一個奇怪的html。然後,當您查看該主題時,可以看到整個頁面的樣式受到影響。我真的不知道生成的html是否有未封閉的標籤或其他東西,但看起來像是這樣,因此頁面的樣式會受到影響。影響整個網站的文字風格

有沒有人知道如何從整個頁面的樣式中「隔離」div的html(或任何容器)?

+2

您不應該真的允許任意的HTML,因爲它會爲您打開XSS洞。也許考慮降價? – 2010-02-09 17:28:59

回答

3

在IFRAME中顯示內容的缺點,你不能這樣做。我通常在這種情況下做的是將標籤剝離邏輯應用到內容中。從安全角度來看,您實際上不想允許任意的HTML,但即使您不關心用戶輸入的內容,也應該剝離出無效的HTML標籤(Word有習慣用類似o:p的奇怪名稱空間創建標籤)並在結果上運行Tidy之類的東西,以確保每個標籤都能正確關閉。那裏有許多用於.NET的Tidy庫; here's one

Here's a quick cut-and-paste我過去是如何做到這一點的。請注意,該類實現了我使用它的項目中的一個接口,但是您得到了一般想法。

+0

如何將其包含在我的項目中?我試圖包括該項目的DLL,但我得到一個異常說,沒有找到源。我是否必須包含整個源代碼? – 2010-02-09 18:14:59

+0

您需要將TinyATL DLL鏈接到您調用它的任何項目。 – Tom 2010-02-09 19:05:18

0

從單詞複製文本可以包括<style>標籤。隔離這些樣式的唯一可靠方法是將輸入控件置於

0

您可以清理輸入或將其顯示在IFrame中。

0

這是我,我會除了基本格式(例如,粗體,斜體),並使用Tidy。這就是我最終做的事情,我將所有CSS樣式的字體去掉並轉換爲<strong>,<em>等。