假設我有一個簡單的ASP.NET MVC博客應用程序,並且我想允許讀者向博客文章添加評論。如果我想阻止任何類型的XSS惡意代碼,我可以對所有註釋進行HTML編碼,以便在渲染時變得無害。但是,如果我想一些基本功能如超鏈接,粗體,斜體等?防止XSS(跨站點腳本)
我知道StackOverflow上使用WMD Markdown Editor,這似乎是一個偉大的選擇。我想要去實現,如果不是事實,它支持都 HTML和降價這leaves it open to XSS attacks。
假設我有一個簡單的ASP.NET MVC博客應用程序,並且我想允許讀者向博客文章添加評論。如果我想阻止任何類型的XSS惡意代碼,我可以對所有註釋進行HTML編碼,以便在渲染時變得無害。但是,如果我想一些基本功能如超鏈接,粗體,斜體等?防止XSS(跨站點腳本)
我知道StackOverflow上使用WMD Markdown Editor,這似乎是一個偉大的選擇。我想要去實現,如果不是事實,它支持都 HTML和降價這leaves it open to XSS attacks。
如果你不想使用編輯器,你可能會考慮OWASP's AntiSamy。
您可以運行在這裏一個例子: http://www.antisamy.net/
你打算支持多少HTML?大膽/斜體/基本的東西?在這種情況下,您可以將它們轉換爲markdown語法,然後剝去其餘的HTML。
剝離需要在服務器端完成,然後再存儲。在檢查SQL漏洞和其他不需要的東西時,您還需要驗證服務器上的輸入。
對。採取白名單方式 - 不是黑名單方式。 – 2009-01-15 00:17:58
我建議你只提交markdown語法。在前端,客戶端可以輸入markdown並有一個HTML預覽(與SO相同),但只提交markdown語法服務器端。然後你可以驗證它,生成HTML,轉義並存儲它。
我相信這是我們大多數人的做法。在任何一種情況下,減價都可以減輕任何人編寫結構化HTML代碼的權力,併爲那些甚至不知道如何去做的人提供權力。
如果您想要對HTML做某些特定的處理,那麼您可以使用一些CSS繼承來調整它「.comment a {color:#F0F; }',前端JS或者只是在存儲它之前從解析markdown遍歷生成的HTML。
您可以使用HTML白名單,以便仍然可以使用某些標籤,但其他所有內容都被阻止。
有些工具可以爲您做到這一點。 SO使用the code即Slough linked。
我會爲FCKEditor投票,但你必須做一些extra steps到返回的輸出too。
你永遠無法信任用戶輸入,來自瀏覽器的所有內容都可能被篡改 – rjlopes 2010-10-14 18:06:02
對於搜索的原因,可能有助於改變其標題爲「防止XSS(跨網站腳本)「的標題。對於不瞭解其友好名稱的人,XSS,他們可能會很難找到這個線索。 – BuddyJoe 2009-01-15 01:01:57