我們如何處理asp.net mvc(C#)應用程序中的JavaScript注入?在asp.net中處理javascript注入mvc
我可以在我的視圖中使用Html.Encode。但問題是我有html也顯示在頁面中像博客文章。
我需要刪除在應用程序的輸入元素中輸入的腳本?我怎麼能在一個普通的地方做到這一點?
我們如何處理asp.net mvc(C#)應用程序中的JavaScript注入?在asp.net中處理javascript注入mvc
我可以在我的視圖中使用Html.Encode。但問題是我有html也顯示在頁面中像博客文章。
我需要刪除在應用程序的輸入元素中輸入的腳本?我怎麼能在一個普通的地方做到這一點?
「高級別」這樣做的最好的做法是:
HTML編碼用戶輸入將停止JavaSc在您的網站上被執行。
您要存儲用戶輸入「輸入」的原因是因爲您將來可能會決定輸出其他格式的用戶數據(PDF,電子郵件,JavaScript,RSS等)相同的編碼規則。因此,您應該儘可能使數據儘可能接近原始形式。這會讓事情更容易處理。
對於HTML編碼用戶輸入,您可以使用System.Web.HttpUtility.HtmlEncode(...)
。
要合併步驟2 & 3,您可以使用微軟的AntiXSS library。它提供了一些額外的編碼方法,HttpUtility類不提供使您的工作更輕鬆。直到Malcolm在評論中指出,我沒有意識到這個庫的最新版本包含一個名爲GetSafeHtmlFragment(...)
的方法,它將手動刪除所有的JavaScript。這將處理所有爲您刪除用戶輸入的JavaScript代碼的繁重工作。你很可能想要使用GetSafeHtmlFragment
和而不是GetSafeHtml
,它被設計爲編碼整個HTML文檔。
小注:如果您發現功能無法正常工作,請閱讀最新AntiXss版本(2012年1月)的評論。您可能需要考慮使用舊版本,具體取決於您的需求,但請注意,舊版本已知其中存在安全缺陷。 Microsoft has acknowledged the issue and is looking into a solution.
我還沒有聽說過Anixss libray一段時間,並不知道它現在在codeplex上。它有Javascript編碼。我的理解是,如果你想在javascript中使用輸入,你需要Javascript編碼。 HttpUtility沒有Javascript編碼。所以每個項目都需要擁有這個圖書館? – 2010-02-06 15:19:26
@Malcolm每個計劃編碼JavaScript用戶輸入的項目都應該有這個庫。 – 2010-02-06 15:33:53
這是新的,看起來非常有用:AntiXss.GetSafeHtml(輸入)。該方法擁有自己的html標籤白名單。完善! – 2010-02-06 16:11:34