繁体   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