我们如何处理 asp.net mvc (C#) 应用程序中的 javascript 注入?
我可以在我的视图中使用 Html.Encode。但问题是我有 html 也可以像博客文章一样显示在页面中。
我需要删除在应用程序的输入元素中输入的脚本吗?我怎么能在一个共同的地方做到这一点?
我们如何处理 asp.net mvc (C#) 应用程序中的 javascript 注入?
我可以在我的视图中使用 Html.Encode。但问题是我有 html 也可以像博客文章一样显示在页面中。
我需要删除在应用程序的输入元素中输入的脚本吗?我怎么能在一个共同的地方做到这一点?
这样做的“高级”最佳实践是:
输出上的 HTML 编码用户输入将阻止 JavaScript 在您的站点上执行。
您希望“按输入”存储用户输入的原因是因为您将来可能决定以其他格式(PDF、电子邮件、JavaScript、RSS 等)输出用户数据,这些格式没有相同的编码规则. 因此,您应该使数据尽可能接近其原始形式。这将使以后的事情更容易处理。
对于 HTML 编码用户输入,您可以使用System.Web.HttpUtility.HtmlEncode(...)
.
要结合步骤 2 和 3,您可以使用 Microsoft 的AntiXSS 库。它提供了一些 HttpUtility 类没有提供的额外编码方法,以使您的工作更轻松。直到 Malcolm 在评论中指出,我才知道这个库的最新版本包含一个名为的方法,该方法GetSafeHtmlFragment(...)
将手动删除所有 JavaScript。这将为您处理删除用户输入的 JavaScript 代码的所有繁重工作。您很可能希望使用 GetSafeHtmlFragment
and not GetSafeHtml
,它旨在对整个 HTML 文档进行编码。
小提示:如果您发现功能未按预期工作,请阅读最新 AntiXss 版本(撰写本文时为 2012 年 1 月)的评论。您可能需要根据需要考虑使用旧版本,但请注意旧版本中存在已知的安全缺陷。微软已经承认了这个问题并正在寻找解决方案。