2009-10-05 136 views
0

我有一個ASP.NET MVC應用程序,我正在使用CKEditor進行文本輸入。我關閉了輸入驗證,以便從CKEditor創建的HTML可以傳遞到控制器操作中。然後我在網頁上顯示輸入的HTML。使用富文本編輯器時的輸入驗證

我只在CKEditor上啓用了某些按鈕,但顯然有人可以發送他們想要的任何文本。我希望能夠在用戶輸入後在頁面上顯示HTML。我如何驗證輸入,但仍然能夠顯示在編輯器中啓用的少數幾件事情?

所以基本上我想除了一些關鍵的東西,比如粗體,斜體,列表和鏈接,都要消毒。這需要在服務器端完成。

回答

0

AntiXSS怎麼樣?

+0

AntiXss.GetSafeHtmlFragment將是一個開始。這從HTML中刪除任何腳本。雖然HTML怎麼樣?任何HTML都可以輸入。也許這真的不是問題,只有XSS是。我不太熟悉這方面的最佳做法。我很少需要用戶輸入不會被編碼的東西。 – 2009-10-05 18:36:38

+0

那麼,「安全」HTML的主要缺點是它可能是畸形的。在這種情況下,Tidy可能是一個解決方案。 – 2009-10-06 19:12:01

0

看到我的完整的答案here從類似的問題:

我發現與編碼尖括號 更換天使 支架解決了大多數問題

+0

這與HTML編碼有何不同?問題是,我不想轉換尖括號。基本上,我想讓一些HTML元素不被編碼。諸如粗體,斜體,鏈接和列表之類的東西。 – 2009-10-06 14:50:56

0

您可以創建一個的「白名單」對您想要允許的html標籤進行排序。你可以從HTML編碼開始。然後,替換了一系列的「允許」序列,如:

"&lt;strong&gt;" and "&lt;/strong&gt;" back to "<strong>" and "</strong>" 
"&lt;em&gt;" and "&lt;/em&gt;" back to "<em>" and "</em>" 
"&lt;li&gt;" and "&lt;/li&gt;" back to ... etc. etc. 

類的東西的一個標記,你可以再打一個正則表達式(因爲你想要的href屬性被允許太)。你仍然要小心XSS;別人已經推薦AntiXSS。

樣品的正則表達式來替換一個標籤:

&lt;a href="([^"]+)"&gt;

然後替換爲

<a href="$1">

祝你好運!