gpt4 book ai didi

asp.net - 在 ASP.NET Core 中使用防伪 cookie,但使用非默认 CookieName

转载 作者:行者123 更新时间:2023-12-02 12:31:35 25 4
gpt4 key购买 nike

我正在考虑更改 ASP.NET Core 中默认防伪 cookie 的名称。

我想更改 cookie 名称的原因是为了匿名化 cookie,在我看来,最终用户没有理由能够确定此 cookie 的责任。

Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.CookieName

  1. 如何更改防伪 Cookie 的名称?我想这应该在 Startup.cs 文件中以某种方式完成?
  2. 更改默认防伪 Cookie 的名称可能会产生什么影响?
  3. 如何在 ASP.NET Core 中使用防伪 Cookie?
  4. 不同的网络应用程序(使用相同的域)是否应该共享单个防伪 Cookie,还是应该为每个网络应用程序创建单独的防伪 Cookie?

最佳答案

您可以在 Startup.ConfigureServices 中设置不同的名称,如下所示:

services.AddAntiforgery(opts => opts.CookieName = "MyAntiforgeryCookie");

对于.Net Core 2.0.0 or greater there will be changes :

引用: https://learn.microsoft.com/en-us/dotnet/api/Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions?view=aspnetcore-2.0

对于以下用途:

services.AddAntiforgery(opts => opts.Cookie.Name = "MyAntiforgeryCookie");

默认情况下,AddMvc() 内部调用 AddAntiforgery(),这意味着您将获得默认的 cookie、 header 和表单名称。如果您需要/想要使用不同的名称,您可以通过手动调用 AddAntiforgery 来实现,如上所述。

如果您更改 cookie 名称,应该不会对您的应用程序产生任何影响(除非您自己添加了手动使用该 cookie 的代码)。您可能还想更改标题/表单名称,例如官方 Antiforgery 存储库 has an example它使用 Angular 并将 header 更改为标准 Angular XSRF token header 。

要使用它,请将[ValidateAntiForgeryToken]添加到除GET请求之外的 Controller 操作中。

只要使用 asp 表单标签助手,您就无需对标准 html 表单执行任何其他操作,请参阅 this question .

如果您使用 ajax 请求,则需要在请求中包含 header 或字段,其中包含生成的 token 。您基本上需要:

  1. 获取IAntiforgery
  2. 调用var tokenSet = antiforgery.GetAndStoreTokens(httpContext);
  3. 使其可供您的 js 代码使用,以便它知道值 tokenSet.RequestToken 包含为名称为 tokenSet.FormFieldName 的字段或每个 ajax 请求中名称为 tokenSet.HeaderName 的 header 。

    • 一些选项,例如将 token 渲染到 js 布局中脚本部分内的 JS 对象中,添加 JS 可读 cookie(如角度示例中所示),继续渲染 ajax 请求中包含的隐藏字段
    • 对选项有很好的概述 in this answer

目标是 POST/PUT/DELETE/PATCH 请求包含 2 件事:

  • 防伪 cookie
  • 带有 token 的字段/ header

因此防伪中间件可以验证不存在 XSRF。

<小时/>

有关 Cookie 名称/域的更新

合理的默认设置是每个应用程序都有自己的 cookie。大多数情况下,您可以使用默认方法获得此信息,因为 cookie 上没有专门设置域,因此 cookie 从请求中获取域。这意味着不同的应用程序有不同的 cookie,除非应用程序托管在同一域中。

  • 详细了解 Cookie 的工作原理 here

您可能只想在特殊情况下共享 cookie,例如,如果您有 2 个应用程序,其中应用程序 A 中的表单发布到应用程序 B。在这些情况下,请确保您使用的域/子域与这两个应用程序都匹配使用相同的 cookiea 名称。

  • 了解有关 XSRF 的更多信息 here

关于asp.net - 在 ASP.NET Core 中使用防伪 cookie,但使用非默认 CookieName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40511103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com