2009-01-15 94 views
9

假設我有一個簡單的ASP.NET MVC博客應用程序,並且我想允許讀者向博客文章添加評論。如果我想阻止任何類型的XSS惡意代碼,我可以對所有註釋進行HTML編碼,以便在渲染時變得無害。但是,如果我想一些基本功能如超鏈接,粗體,斜體等?防止XSS(跨站點腳本)

我知道StackOverflow上使用WMD Markdown Editor,這似乎是一個偉大的選擇。我想要去實現,如果不是事實,它支持 HTML和降價這leaves it open to XSS attacks

+1

對於搜索的原因,可能有助於改變其標題爲「防止XSS(跨網站腳本)「的標題。對於不瞭解其友好名稱的人,XSS,他們可能會很難找到這個線索。 – BuddyJoe 2009-01-15 01:01:57

回答

3

你打算支持多少HTML?大膽/斜體/基本的東西?在這種情況下,您可以將它們轉換爲markdown語法,然後剝去其餘的HTML。

剝離需要在服務器端完成,然後再存儲。在檢查SQL漏洞和其他不需要的東西時,您還需要驗證服務器上的輸入。

+0

對。採取白名單方式 - 不是黑名單方式。 – 2009-01-15 00:17:58

1

我建議你只提交markdown語法。在前端,客戶端可以輸入markdown並有一個HTML預覽(與SO相同),但只提交markdown語法服務器端。然後你可以驗證它,生成HTML,轉義並存儲它。

我相信這是我們大多數人的做法。在任何一種情況下,減價都可以減輕任何人編寫結構化HTML代碼的權力,併爲那些甚至不知道如何去做的人提供權力。

如果您想要對HTML做某些特定的處理,那麼您可以使用一些CSS繼承來調整它「.comment a {color:#F0F; }',前端JS或者只是在存儲它之前從解析markdown遍歷生成的HTML。

0

您可以使用HTML白名單,以便仍然可以使用某些標籤,但其他所有內容都被阻止。

有些工具可以爲您做到這一點。 SO使用the codeSlough linked