Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在asp.net mvc中处理javascript注入_Javascript_Asp.net Mvc_Javascript Injection - Fatal编程技术网

在asp.net mvc中处理javascript注入

在asp.net mvc中处理javascript注入,javascript,asp.net-mvc,javascript-injection,Javascript,Asp.net Mvc,Javascript Injection,我们如何处理asp.net mvc(C#)应用程序中的javascript注入 我可以在我的视图中使用Html.Encode。但问题是,我在页面中也可以像博客文章一样显示html 我需要删除在应用程序的输入元素中输入的脚本吗?如何在一个普通的地方做到这一点?实现这一点的“高级”最佳实践是: 按输入系统的方式存储用户输入 HTML对任何页面上输出的所有用户输入进行编码 使用白名单方法对上一步编码的允许HTML字符、属性、属性值等进行“反编码” 输出时对用户输入进行HTML编码将阻止JavaSc

我们如何处理asp.net mvc(C#)应用程序中的javascript注入

我可以在我的视图中使用Html.Encode。但问题是,我在页面中也可以像博客文章一样显示html

我需要删除在应用程序的输入元素中输入的脚本吗?如何在一个普通的地方做到这一点?

实现这一点的“高级”最佳实践是:

  • 按输入系统的方式存储用户输入
  • HTML对任何页面上输出的所有用户输入进行编码
  • 使用白名单方法对上一步编码的允许HTML字符、属性、属性值等进行“反编码”
输出时对用户输入进行HTML编码将阻止JavaScript在您的站点上执行

您希望将用户输入存储为“已输入”的原因是,将来您可能会决定以其他格式(PDF、电子邮件、JavaScript、RSS等)输出用户数据,这些格式没有相同的编码规则。因此,您应该使数据尽可能接近其原始形式。这将使以后的事情更容易处理

对于HTML编码用户输入,可以使用

要结合第2步和第3步,可以使用Microsoft的。它提供了一些HttpUtility类没有提供的额外编码方法,使您的工作更容易。直到Malcolm在评论中指出,这个库的最新版本包括一个名为
GetSafeThmlFragment(…)
的方法,该方法将手动删除所有JavaScript,我才意识到这一点。这将为您处理删除用户输入的JavaScript代码的所有繁重工作。您很可能希望使用
GetSafeHtmlFragment
而不是
GetSafeHtml
,这是为编码整个HTML文档而设计的


次要说明:如果您发现功能未如预期运行,请阅读最新AntiXss版本(撰写本文时为2012年1月)的评论。您可能想考虑根据您的需要使用旧版本,不过建议旧版本中有安全缺陷。 我已经有一段时间没听说过Anixss图书馆了,也不知道它现在在codeplex上。它有Javascript编码。我的理解是,如果想在Javascript中使用输入,就需要对Javascript进行编码。HttpUtility没有Javascript编码。所以每个项目都需要这个库,对吗?@Malcolm计划在JavaScript中使用编码用户输入的每个项目都应该有这个库。这是新的,看起来非常有用:AntiXss.GetSafeHtml(输入)。该方法有自己的html标记白名单。完美的在这篇文章中添加了警告注释,我正要开始使用AntiXSS,但幸运的是,我之前读过评论消息。根据最新版本的AntiXSS中出现的一些问题的评论,这个答案都是好的和可靠的。@Kallex在这里添加此注释作为注释是合适的,而不是编辑答案。