2010-02-06 60 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