无 Cookie 的 ASP.NET Core

8
我正在开发一个ASP.NET Core 3.1应用程序。我没有使用任何形式的身份验证、会话数据/逻辑和表单元素。尽管我没有在我的Startup类中调用services.AddAntiforgery(),但是我在开发者控制台中看到了.AspNetCore.Antiforgery cookie。
我找到了这个StackOverflow问题,它有一个非常不令人满意的答案,因为这个Cookie仍然会被发送到客户端(由hemp的评论指出)。
所以我的问题是:如何完全删除这个CSFR Cookie?

@KirkLarkin 我这样做的动机是为了在没有cookies的情况下托管网站。我认为这是一个不错的功能,不是吗? - ˈvɔlə
1
asp.net core 标签默认添加 -> 您需要类似 <form method="post" asp-antiforgery="false"> 的东西。 - panoskarajohn
2
虽然没有cookie的网站是一个高尚的目标,但防伪cookie是一种安全cookie,在我看来不应该被删除。 - Charles
2
我建议使用AutoValidateAntiforgeryTokenAttribute,它仅会要求在不安全的请求中提供防伪标记。只要连接是安全的,您的站点就不会为GET,HEAD,OPTIONS,TRACE请求传递标记 https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.autovalidateantiforgerytokenattribute?view=aspnetcore-3.1。通常情况下,我不会省略`Anti Forgery`,但如果必须这样做,至少要有一个小型备份。 - panoskarajohn
1
有多种方法可以选择退出请求验证:https://www.learnrazorpages.com/security/request-verification#opting-out - Mike Brind
显示剩余3条评论
2个回答

4

2
但问题要求禁用cookie而不是表单中发送的令牌。即使没有生成表单或视图,服务器仍会传输令牌。 - Mert Gülsoy
我对你所说的不太熟悉,能否请您提供更多信息? - panoskarajohn
问题描述了服务器发送了一个名为 .AspNetCore.Antiforgery 的 cookie。你提出的方法并没有删除或防止该 cookie。你在回答中提供的方法只是防止隐藏输入字段被插入到表单中。你的回答并没有正确回答这个问题。 - Mert Gülsoy
1
对不起,我刚刚测试了一下。浏览器没有发送任何cookie。我使用的是Chrome https://developers.google.com/web/tools/chrome-devtools/storage/cookies。请提供证据。同时,请确保删除之前创建的防伪造时创建的cookie。我很乐意更新答案。我只是无法复制您所说的内容。如果有先前的cookie直到它过期仍然存在,那么您是正确的。您必须手动删除它。尽管您的后端不需要它。**也可以自己回答这个问题**。 - panoskarajohn
1
抱歉,那是我的错误。我正在使用Postman进行测试。我确信已经清除了Cookies,但实际上没有成功。因此我一直看到存储的cookie。谢谢您的回复。在使用PowerShell进行测试后,我发现没有发送任何cookie。 - Mert Gülsoy

4

正如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,其中包含关于ASP.NET Core FormTagHelper中避免跨站请求伪造的相关信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接