我们如何处理 asp.net mvc (C#) 应用程序中的 javascript 注入?
我可以在我的视图中使用 Html.Encode 。但问题是我也有 html 可以像博客文章一样显示在页面中。
我需要删除在应用程序的输入元素中输入的脚本?我怎样才能在公共场所做到这一点?
执行此操作的“高级”最佳实践是:
- 按照输入系统的方式存储用户输入
- HTML 在任何页面上输出时对所有用户输入进行编码
- 使用白名单方法对您在上一步中编码的允许的 HTML 字符、属性、属性值等进行“反编码”
对输出上的用户输入进行 HTML 编码将阻止 JavaScript 在您的网站上执行。
您想要“按输入形式”存储用户输入的原因是因为您将来可能决定以其他格式(PDF、电子邮件、JavaScript、RSS 等)输出用户数据,这些格式不具有相同的编码规则。因此,您应该使数据尽可能接近其原始形式。这将使以后的事情处理起来更容易。
对于 HTML 编码用户输入,您可以使用System.Web.HttpUtility.HtmlEncode(...).
要结合步骤 2 和 3,您可以使用 MicrosoftAntiXSS 库。它提供了一些 HttpUtility 类未提供的额外编码方法,以使您的工作更轻松。直到马尔科姆在评论中指出,我才意识到该库的最新版本包含一个名为GetSafeHtmlFragment(...)
这将手动删除所有 JavaScript。这将为您处理删除用户输入的 JavaScript 代码的所有繁重工作。您很可能想使用GetSafeHtmlFragment
and not GetSafeHtml
,旨在对整个 HTML 文档进行编码。
小注意事项:如果您发现功能未按预期工作,请阅读最新 AntiXss 版本(撰写本文时为 2012 年 1 月)的评论。您可能需要根据需要考虑使用旧版本,但请注意旧版本存在已知的安全缺陷。微软已经承认了这个问题并正在寻找解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)