簡體   English   中英

在asp.net mvc中處理javascript注入

[英]handle javascript injection in asp.net mvc

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

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

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

這樣做的“高級”最佳實踐是:

  • 將用戶輸入存儲為輸入系統的方式
  • HTML在任何頁面上輸出時對所有用戶輸入進行編碼
  • 使用白名單方法“解碼”您在上一步中編碼的允許的HTML字符,屬性,屬性值等

輸出上的HTML編碼用戶輸入將阻止JavaScript在您的站點上執行。

您希望將用戶輸入存儲為“已輸入”的原因是因為您將來可能決定輸出其他格式(PDF,電子郵件,JavaScript,RSS等)的用戶數據,這些格式不具有相同的編碼規則。 因此,您應該盡可能保持數據盡可能接近原始格式。 這將使以后更容易處理。

對於HTML編碼用戶輸入,您可以使用System.Web.HttpUtility.HtmlEncode(...)

要結合步驟2和3,您可以使用Microsoft的AntiXSS庫 它提供了一些額外的編碼方法,HttpUtility類沒有提供這些方法來使您的工作更輕松。 直到Malcolm在評論中指出,我才意識到這個庫的最新版本包含一個名為GetSafeHtmlFragment(...)的方法,它將手動刪除所有JavaScript。 這將解決為您刪除用戶輸入的JavaScript代碼的所有繁重工作。 您很可能希望使用GetSafeHtmlFragment不是 GetSafeHtml ,它用於編碼整個HTML文檔。

次要注意事項:如果您發現功能無法正常工作,請閱讀最新的AntiXss版本(撰寫本文時的2012年1月)的評論。 您可能需要考慮使用較舊的版本,具體取決於您的需求,但請注意舊版本中存在已知的安全缺陷。 微軟已經承認了這個問題並正在尋找解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM