2010-05-06 29 views
5

我試圖找到消除WMD編輯器輸入的方法。大規模殺傷性武器編輯器消毒

具體而言,我試圖製作HTML標記只在WMD生成的<code>標記中可用。這是可能的

我的問題是,下面的代碼呈現爲HTML,這是潛在的XSS attacks

例如,<a onmouseover="alert(1)" href="#">read this!</a>

上述代碼在預覽模式下,通常都呈現,並且當保存到數據庫中。

我注意到堆棧溢出似乎沒有這個問題。相同的代碼只是呈現爲文本。

我注意到Stack Overflow團隊在http://refactormycode.com/codes/333-sanitize-html中分享了他們的代碼。我是否真的必須使用C#來消毒WMD才能做到這一點?

+1

noone可以回答我的問題嗎?沒有人做過? – 2010-05-06 12:01:18

回答

1

如果你想阻止WMD在客戶端的壞腳本,請看我的答案: Align the WMD editor's preview HTML with server-side HTML validation (e.g. no embedded JavaScript code)

它顯示瞭如何在WMD編輯器中實現客戶端白名單,以將WMD的預覽窗格HTML限制爲已知安全的HTML元素和已知安全的HTML屬性。它在之後進行驗證WMD生成了它的HTML,所以即使WMD編輯器的HTML代中存在一個允許糟糕腳本通過的錯誤,白名單阻止程序也會捕獲它。此代碼基於StackOverflow.com的相同驗證的實現。這就是說,你也需要服務器端的驗證(如果你使用PHP,HTML Purifier是一個不錯的選擇),因爲即使你修​​復了客戶端,也不能防止攻擊者模擬瀏覽器,通過郵寄到您的服務器來保存惡意降價。所以做客戶端WMD預覽器驗證實際上是不需要的,除非抵禦攻擊者設法在服務器上獲得折衷降價的不明確情況,並說服網站管理員編輯頁面。在這種情況下,客戶端WMD預覽器驗證可能會阻止攻擊者接管整個站點。

此外,做客戶端驗證可能會有幫助,因爲那樣您就知道客戶端允許的相同標記和HTML也將被允許在服務器上。確保將服務器端白名單與客戶端白名單同步。如果你想要一個例子,StackOverflow的白名單是here

相關問題