【问题标题】:How to protect against CSRF by default in ASP.NET Core如何在 ASP.NET Core 中默认防止 CSRF
【发布时间】:2018-02-15 16:10:24
【问题描述】:

灵感来自:How to protect against CSRF by default in ASP.NET MVC 4?

有没有办法在 ASP.NET Core 中实现相同的结果?

【问题讨论】:

  • @MU 所以如果我要全局添加这个,只需添加 services.AddMvc(options => options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute())); 就足够了?
  • @Ludisposed 是的,这将自动对所有路由强制执行 CSRF 验证。

标签: c# .net asp.net-core csrf-protection


【解决方案1】:

您可以将AutoValidateAntiforgeryTokenAttribute 应用为Startup.ConfigureServices() 中的全局过滤器,因此它会自动应用于您的所有路由:

services.AddMvc(options => 
    options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute()));

请注意,AutoValidateAntiforgeryTokenAttribute 仅适用于不安全请求(POST、PUT),不适用于安全请求(GET、HEAD、OPTIONS、TRACE)。这样,只有容易受到 CSRF 攻击的操作才需要防伪令牌。确保只有您的 POST 或 PUT 操作会修改数据,这一点很重要!

official docs 建议将这种全局过滤方法用于非 API 应用程序。

【讨论】:

  • 所以我什至不需要Ignore GET 的?
  • @Ludisposed 使用 AutoValidate 您不需要在 GET 路由上使用 IgnoreAntiforgeryToken。那是“自动”部分。 :)
【解决方案2】:

另一种永久保护 CSRF 的方法是完全不使用 cookie 进行身份验证。如果这是一种可能性,我会尝试检查令牌身份验证并实施它。没有 cookie,没有 CSRF。

据我所知,拥有 JWT 令牌认证并不是什么大问题,例如与核心。

【讨论】:

  • 令牌(在非 API 上下文中)的问题之一是安全地存储它们。 Cookie 容易受到 CSRF 的攻击,但它们至少具有 HttpOnly 标志。在 localStorage 中存储东西没有那种安全措施。请参阅此讨论:security.stackexchange.com/a/148163/110474
  • 是的,我知道,但你必须先执行 XSS 之类的东西才能读取它们。并不是任何人都可以做到这一点,但这当然是一个合理的担忧。此外,如果您有能力从本地存储中读取数据,您可能只需要调用任何您想要的 webapi,cookie 将自动发送。
猜你喜欢
  • 2022-12-11
  • 2020-06-15
  • 2017-07-02
  • 2013-01-02
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 2020-06-14
  • 2012-03-30
相关资源
最近更新 更多