从XSS保护ASP.NET MVC 5应用程序

时间:2017-02-24 20:29:37

标签: asp.net asp.net-mvc asp.net-mvc-5 xss

我想保护我的ASP.NET MVC 5应用程序免受Cross Site Scripting(XSS)的攻击。我已经阅读了几篇文章和SO帖子。理想的选择是对输入进行编码,并在重新显示输入时进行编码。

但是,默认情况下,MVC会阻止包含HTML标记的任何请求,以避免XSS攻击。默认情况下,如果在请求中检测到潜在危险内容,ASP.NET 4.5将引发异常。

在某些合法的情况下,用户完全可以提交标记。但我的应用程序有 NO 这种情况,用户需要输入标记。

如果我在输入字段中输入任何标记,asp.net会按预期抛出异常。 说过我真的还需要编码输入,或者它已经被asp.net 5照顾了吗?

1 个答案:

答案 0 :(得分:1)

当发布包含HTML的任何输入字段时,ASP.NET MVC将抛出异常。 您需要在特定输入上添加AllowHtml属性。例如:

public class Post
{
  public string Title {set;get;}
  [AllowHtml]
  public string Content { set;get;}
}

显示此字段时,您需要按照文档使用@

https://docs.microsoft.com/en-us/aspnet/core/security/cross-site-scripting

  

MVC中使用的Razor引擎自动编码所有源输出   来自变量,除非你真的很努力地阻止它这样做。它   每当使用@指令时,都使用HTML属性编码规则。   由于HTML属性编码是HTML编码的超集,这意味着   你不必关心自己是否应该使用HTML   编码或HTML属性编码。您必须确保仅使用   @在HTML上下文中,而不是在尝试插入不受信任的输入时   直接进入JavaScript。标记助手也会对您使用的输入进行编码   在标签参数中。