2010-02-06 34 views
3

我們如何處理asp.net mvc(C#)應用程序中的JavaScript注入?在asp.net中處理javascript注入mvc

我可以在我的視圖中使用Html.Encode。但問題是我有html也顯示在頁面中像博客文章。

我需要刪除在應用程序的輸入元素中輸入的腳本?我怎麼能在一個普通的地方做到這一點?

回答

9

「高級別」這樣做的最好的做法是:

  • 存儲用戶輸入它進入系統
  • HTML編碼所有用戶輸入時,輸出上的任何方式
  • 使用白名單的方式「去編碼」允許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.

+0

我還沒有聽說過Anixss libray一段時間,並不知道它現在在codeplex上。它有Javascript編碼。我的理解是,如果你想在javascript中使用輸入,你需要Javascript編碼。 HttpUtility沒有Javascript編碼。所以每個項目都需要擁有這個圖書館? – 2010-02-06 15:19:26

+0

@Malcolm每個計劃編碼JavaScript用戶輸入的項目都應該有這個庫。 – 2010-02-06 15:33:53

+1

這是新的,看起來非常有用:AntiXss.GetSafeHtml(輸入)。該方法擁有自己的html標籤白名單。完善! – 2010-02-06 16:11:34