【问题标题】:Cookieless ASP.NET Core无 Cookie 的 ASP.NET 核心
【发布时间】:2020-04-20 15:39:17
【问题描述】:

我正在开发一个 ASP.NET Core 3.1 应用程序。我没有使用任何类型的身份验证、会话数据/逻辑和表单元素。我在开发者控制台中看到了 .AspNetCore.Antiforgery cookie,尽管我没有在 Startup 类中调用 services.AddAntiforgery()

我发现this StackOverflow question 接受的答案非常不令人满意,因为此 cookie 仍将发送给客户端(由 hemp 的评论指出)。

所以我的问题是:如何完全删除这个 CSFR cookie?

【问题讨论】:

  • 这样做的动机是什么?
  • asp.net核心标签默认添加->你需要这样<form method="post" asp-antiforgery="false">
  • 虽然拥有一个没有 cookie 的网站是一个崇高的目标,但 Antiforgery cookie 是一个安全 cookie,恕我直言不应该删除。
  • 我建议使用AutoValidateAntiforgeryTokenAttribute,它只需要一个防伪令牌来处理不安全的请求。只要连接是安全的,您的站点就不会为GET,HEAD,OPTIONS,TRACE 请求docs.microsoft.com/en-us/dotnet/api/… 传递令牌。一般来说,我不会省略Anti Forgery,但如果你必须至少有一个小备份。
  • 有多种方法可以选择退出请求验证:learnrazorpages.com/security/request-verification#opting-out

标签: c# asp.net-core cookies antiforgerytoken asp.net-core-3.1


【解决方案1】:

Asp.Net Core 自动将防伪令牌添加到form

您需要<form method="post" asp-antiforgery="false">,这将省略防伪令牌。

尽管 Microsoft 的此文档说明了如何防止跨站点。 有很多关于如何忽略它的资料 -> https://docs.microsoft.com/en-us/aspnet/core/security/anti-request-forgery?view=aspnetcore-3.1#aspnet-core-antiforgery-configuration

文档中列出了所有适当的技术。

【讨论】:

  • 但问题询问如何禁用 cookie 而不是表单中发送的令牌。即使没有生成表单甚至没有生成视图,令牌仍然由服务器传输。
  • 我不熟悉你在说什么,你能提供更多信息吗?
  • 问题是服务器发送了一个cookie。 cookie 的名称是 .AspNetCore.Antiforgery 您建议的方法不会删除或阻止 cookie。在您的答案中应用该方法只会阻止将隐藏的输入字段插入到表单中。您的回答没有正确回答问题。
  • 对不起,我刚刚测试了这个。不会向浏览器发送 cookie。我使用了 chrome developers.google.com/web/tools/chrome-devtools/storage/cookies。请提供证据。还要确保删除防伪为真时创建的先前 cookie。我很高兴更新答案。我只是无法重现你所说的。你是正确的,但如果有一个以前的 cookie 直到它过期它仍然存在。你必须手动删除它。尽管您的后端不需要它。 也可以自己回答这个问题
  • 对不起。那是我的错误。我正在用 Postman 进行测试。我确定我已经清除了 cookie。但未能如愿。所以我看到了存储的cookie。感谢你的回复。在使用 PowerShell 进行测试后,我发现没有发送任何 cookie。
【解决方案2】:

正如 panoskarajohn 所说,

Asp.Net Core 自动将防伪令牌添加到表单中。

因为它是一个标签助手。所以你可以避免标签助手停止防伪令牌。您可以使用标签助手“!”退出符号

<!form  method=”post”>
    …
</!form >

另外,你可以避免整个页面的标签助手。

@removeTagHelper Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper,  Microsoft.AspNetCore.Mvc.TagHelpers

查看此链接http://blog.vivensas.com/cross-site-request-forgery-in-asp-net-core-formtaghelper/#avoidAntiForgeryToken

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多