首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ASP.NET核心中使用防伪cookie,但使用非默认CookieName

在ASP.NET核心中使用防伪cookie,但使用非默认CookieName
EN

Stack Overflow用户
提问于 2016-11-09 15:57:51
回答 1查看 12.1K关注 0票数 10

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

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

Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.CookieName

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-09 18:02:43

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

代码语言:javascript
运行
复制
services.AddAntiforgery(opts => opts.CookieName = "MyAntiforgeryCookie");

对于.Net核心2.0.0或更高版本将发生更改

参考资料:https://learn.microsoft.com/en-us/dotnet/api/Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions?view=aspnetcore-2.0

用于这一用途的方法如下:

代码语言:javascript
运行
复制
services.AddAntiforgery(opts => opts.Cookie.Name = "MyAntiforgeryCookie");

默认情况下,AddMvc()内部调用AddAntiforgery(),这意味着您将获得默认cookie、标头和表单名称。如果您需要/希望使用不同的名称,您可以按照上面的方式手动调用AddAntiforgery。

如果您更改cookie名称(除非您自己添加了手动使用该cookie的代码),那么应用程序就不会有任何影响。您还可能希望更改标头/表单名称,例如使用角并将标头更改为标准角XSRF令牌标头的正式防伪回购有一个例子

为了使用它,将[ValidateAntiForgeryToken]添加到除GET请求之外的控制器操作中。

只要您使用asp表单标记帮助器,您就不必对标准html表单做任何其他操作,请参阅这个问题

如果使用ajax请求,则需要在请求中包含包含生成令牌的标头或字段。你基本上需要:

  1. 得到一个IAntiforgery
  2. 调用var tokenSet = antiforgery.GetAndStoreTokens(httpContext);
  3. 让js代码可以使用它,这样它就可以知道在每个tokenSet.RequestToken请求中包含的值tokenSet.FormFieldName或者名称为tokenSet.HeaderName的字段或具有名称tokenSet.HeaderName的标头。
代码语言:javascript
运行
复制
- A few options for that like rendering the token into a JS object inside a script section in your js layout, adding a JS readable cookie as in the angular example, keep rendering hidden fields you include within the ajax request
- There is a nice overview of the options [in this answer](https://stackoverflow.com/questions/20504846/why-is-it-common-to-put-csrf-prevention-tokens-in-cookies)

其目的是使POST/PUT/DELETE/修补程序请求包括两项内容:

  • 防伪饼干
  • 带有令牌的字段/标头

因此,防伪中间件可以验证是否存在XSRF。

更新cookie名称/域

合理的默认设置是每个应用程序都有自己的cookie。由于cookie上没有专门设置域,所以cookie从请求中获取域,因此通常使用默认方法。这意味着不同应用程序的cookie不同,除非应用程序是由同一个域托管的。

  • 了解更多关于cookies如何工作这里的信息

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

  • 阅读更多关于XSRF 这里的信息
票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40511103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档