我正在考虑更改ASP.NET核心中默认的防伪cookie的名称。
我想更改cookie名称的原因是匿名化cookie,在我看来,没有理由让最终用户能够确定该cookie的责任。
Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.CookieName
发布于 2016-11-09 18:02:43
您可以在Startup.ConfigureServices中设置不同的名称,如下所示:
services.AddAntiforgery(opts => opts.CookieName = "MyAntiforgeryCookie");用于这一用途的方法如下:
services.AddAntiforgery(opts => opts.Cookie.Name = "MyAntiforgeryCookie");默认情况下,AddMvc()内部调用AddAntiforgery(),这意味着您将获得默认cookie、标头和表单名称。如果您需要/希望使用不同的名称,您可以按照上面的方式手动调用AddAntiforgery。
如果您更改cookie名称(除非您自己添加了手动使用该cookie的代码),那么应用程序就不会有任何影响。您还可能希望更改标头/表单名称,例如使用角并将标头更改为标准角XSRF令牌标头的正式防伪回购有一个例子。
为了使用它,将[ValidateAntiForgeryToken]添加到除GET请求之外的控制器操作中。
只要您使用asp表单标记帮助器,您就不必对标准html表单做任何其他操作,请参阅这个问题。
如果使用ajax请求,则需要在请求中包含包含生成令牌的标头或字段。你基本上需要:
IAntiforgeryvar tokenSet = antiforgery.GetAndStoreTokens(httpContext);tokenSet.RequestToken请求中包含的值tokenSet.FormFieldName或者名称为tokenSet.HeaderName的字段或具有名称tokenSet.HeaderName的标头。- 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不同,除非应用程序是由同一个域托管的。
您可能只想在特殊情况下共享cookie,例如,如果您有两个应用程序,其中应用程序A中有一个表单发送到应用程序B。在这些情况下,请确保您使用的域/子域匹配两个应用程序,并且都使用相同的cookiea名称。
https://stackoverflow.com/questions/40511103
复制相似问题