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

2023-11-25

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

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

Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.CookieName

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

您可以在您的中设置不同的名称Startup.ConfigureServices as in:

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

For .Net Core 2.0.0或更高版本会有变化:

参考: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、标头和表单名称。如果您需要/想要使用不同的名称,您可以通过手动调用 AddAntiforgery 来实现,如上所述。

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

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

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

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

  1. Get an IAntiforgery
  2. Call var tokenSet = antiforgery.GetAndStoreTokens(httpContext);
  3. 使其可供您的 js 代码使用,以便它了解该值tokenSet.RequestToken作为带有名称的字段包含在内tokenSet.FormFieldName或带有名称的标题tokenSet.HeaderName在每个 ajax 请求中。

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

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

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

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


关于 cookie 名称/域的更新

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

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

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

  • 了解有关 XSRF 的更多信息here
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ASP.NET Core 中使用防伪 cookie,但使用非默认 CookieName 的相关文章

  • 适用于移动应用程序的 REST API 上的 OAuth

    我正在开发移动应用程序的后端 使用 ASP NET MVC 4 Web Api 构建 RESTful API 该应用程序将在 iOS 和 Android 上运行 我的用户将只能使用他们的 Facebook 帐户登录 并且只有登录后 他们才能
  • 如何在 ASP.NET Core 中启动 Quartz?

    我有以下课程 public class MyEmailService public async Task
  • 如何在2.0构建的应用程序中使用WCF wsHttpBinding服务?

    WCF 服务正在使用 wsHttpBinding 绑定运行 将使用 WCF 服务的应用程序不符合 WCF 或者换句话说 它位于 Framework 2 0 之上 我无法在此应用程序中使用 ServiceModel 因为只有 3 5 支持 S
  • 访问动态创建的控件 (c#)

    在我的代码后面 c 中 我动态创建了一些RadioButtonList 每个RadioButton中有更多RadioButton 我将所有控件放在一个特定的面板中 我需要知道的是稍后如何访问这些控件 因为它们不是在 aspx 文件中创建的
  • EF4 和 SQL Server 2000

    我使用 EF4 和 SQL Server 2005 开发了我的网站 但当转移到临时站点时 发现他们使用 SQL Server 2000 现在我收到此错误 我认为该错误与 SQL Server 2000 有关 Incorrect syntax
  • IDX10503:签名验证失败

    应用程序重新启动或发布后 我收到以下带有有效令牌的错误 IDX10503 Signature validation failed Keys tried System IdentityModel Tokens RsaSecurityKey E
  • 同一域上的多个 Django 站点 - CSRF 失败

    我有两个应用程序在同一域的不同端口上运行 都使用 csrf 中间件 当我登录其中一个应用程序时POST从另一个提交失败 我推测是因为SESSION COOKIE DOMAIN是一样的 我尝试改变SESSION COOKIE NAME 但是
  • 无法使用 System.Net.Mail.SmtpClient 将电子邮件发送到其他域

    请看下面的代码 client Credentials new NetworkCredential SMTP SERVER USERNAME SMTP SERVER PASSWORD client EnableSsl false client
  • 如何使用 JavaScript 或 jQuery 清除 Google Chrome、Mozilla Firefox 和 Safari 中的剪贴板数据

    我正在开发一个网站 我想在使用 JavaScript 或 jQuery 查看我的网站时按下打印屏幕按钮时清除剪贴板数据 谁能帮我解决这个问题 我在 Internet Explorer 中成功处理了这个问题 提前致谢 由于安全原因 您无法使用
  • 如何通过ConfigurationManager找到配置文件位置?

    如何通过ConfigurationManager找到配置文件位置 我在代码中有 ConfigurationManager 类 并且正在调试它 我想知道它指向哪个配置文件 web config 或 app config 等 Configura
  • 为级联子列表构建一个空的 MVC DropdownListFor

    我想构建一个空的下拉列表来接收先前下拉列表选择的结果 实际视图 div Html DropDownListFor m gt m Make Id Model MakeList HeelpResources DropdownlistMakeFi
  • 使用 Ajax Jquery post 请求进行 Json 劫持

    昨天 我读了一些关于如何预防的好文章使用 Asp Net MVC 进行 Json 劫持 http haacked com archive 2009 06 24 json hijacking aspx 规则是 永远不要通过 get 请求发送
  • Docker 多个相同端口问题

    我目前正在解决方案中开发两个相互关联的 ASP NET Core WebAPI 服务 Service1 和 Service2 两者都有 docker 文件并暴露端口 80 Service1是一个独立的服务 需要从Service2调用 我已经
  • 哈希密码如何解密? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在我的网站中使用盐技术的 SHA1 算法对密码进行哈希处理 有什么办法可以解密密码并恢复原来的密码吗 Hashing不加密 解密 当我们
  • 多线程 Web 应用程序

    我知道有很多情况都是在应用程序中使用多线程的好例子 但是什么时候最好在 net Web 应用程序中使用多线程 Web 应用程序几乎肯定已经由托管环境 IIS 等 实现多线程化 如果您的页面受 CPU 限制 并且想要使用多个核心 那么可以说多
  • 通过 JavaScript 单击按钮/页面提交

    我想了解 asp net 框架如何知道何时单击了按钮 因此一旦收到请求 就会在服务器上触发其单击事件 我需要了解它是如何工作的 因为我想从 JavaScript 触发按钮的服务器单击事件 我能够从 JavaScript 执行页面提交 doc
  • 如何在类文件中使用 Url.Action() ?

    如何在 MVC 项目的类文件中使用 Url Action Like namespace 3harf public class myFunction public static void CheckUserAdminPanelPermissi
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 是否使用 C# 数据集? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 C 中的数据集概念有点困惑 编码 ASP NET 站点 但这并不重要 在我的阅读中 我了解到它们 本质上 用作我的应用程序和我的
  • 无法通过docker连接到ASP.NET Core

    大家好 人们已经关注这个问题太久了 需要一些帮助 我制作了一个 ASP NET Core 网站 没有什么特别的 只是 VS 2017 v 1 1 附带的模板 我使用 dotnet core cli 发布网站并使用此 dockerfile 构

随机推荐

  • numpy.genfromtxt 与 datetime.strptime 转换器

    我有与此类似的数据gist我正在尝试用 numpy 提取数据 我对 python 相当陌生 所以我尝试使用以下代码来做到这一点 import numpy as np from datetime import datetime convert
  • jQuery 追加如果不存在

    我想附加一个div仅当它尚不存在时 我正在尝试这样做 但它不起作用 method id on change function e if this find option selected data method column id 1 if
  • Java:静态类?

    我有一门充满实用功能的课程 实例化它的实例没有语义意义 但我仍然想调用它的方法 处理这个问题的最佳方法是什么 静态类 抽象的 标记为 Final 的类上的私有构造函数和静态方法
  • 为什么 ScheduledExecutorService 不根据需要生成线程?

    在我的应用程序中 我使用 ScheduledExecutorService 但仅生成一个线程来处理计划任务 这是因为 ScheduledExecutorService 不会生成线程来处理挂起的任务吗 下面是一个代码片段 它将仅输出 run
  • CUDA:为什么按位运算符有时比逻辑运算符更快?

    当我要从内核中榨取最后一点性能时 我通常会发现替换逻辑运算符 and with 按位运算符 and 使内核更快一些 这是通过查看 CUDA Visual Profiler 中的内核时间摘要观察到的 那么 为什么按位运算符faster比 CU
  • 如何更改shinydashboard中侧边栏的字体大小

    我是shinydashboard的新手 不熟悉CSS 谁能告诉我如何更改shinydashboard中侧边栏的字体大小 非常感谢 下面是我的代码 library shinydashboard library shiny ui lt dash
  • PHP 中的密码安全

    您认为哪种方法最安全 我从 php net 上取下了这些片段 我只是想知道 因为人们发布了自己的内容 而我只是无法理解为什么有些人是这样的 有人可以帮助我并告诉我更多关于这些的信息吗 哪个最安全 为什么 1 2
  • 为什么我们不能覆盖`||`和`&&`?

    大卫 A 布莱克他在书中指出 条件赋值运算符 以及它很少被发现的 表弟 两者都提供与伪操作符方法相同的快捷方式 但基于操作符 即 and 您无法覆盖它 为什么他特别提到我们不能覆盖 and 与对象上的其他一些运算符不同 对象的行为在逻辑上可
  • 如何与 Kronos API 进行通信?

    我有一个Kronos入口点http kronos wfc XmlService我应该能够访问 但是当我在浏览器中打开它时 响应是
  • 在字符串数组项元素中搜索字符串

    如何在字符串数组项元素内搜索特定文本 以下是 xml 文件的示例 字符串数组名称是 android 我在字符串数组中有一些项目 现在我想搜索 软件 这个词 请告诉我该怎么做
  • C# - 以编程方式推进 Powerpoint 幻灯片放映的方法?

    我希望能够通过按 Windows 窗体中的按钮来推进 Powerpoint 演示文稿 这是我找到的一些代码http bytes com topic c sharp answers 272940 open powerpoint present
  • LINQ to SQL 中的 Guid 类型和(“>”大于比较)

    请帮我 我尝试比较 Where 查询方法中的两个 guid 但我得到编译错误 错误 1 运算符 gt 不能应用于 System Guid 和 System Guid 类型的操作数 Guid startUser Here I get user
  • 克隆存储闭包的结构[重复]

    这个问题在这里已经有答案了 我目前正在尝试用 Rust 实现一个简单的解析器组合器库 为此我想要一个通用的map转换解析器结果的函数 问题是我不知道如何复制持有闭包的结构 一个例子是Map以下示例中的结构体 它有一个mapFunction存
  • 如何链接到 intersphinx 中的根页面

    我已启用sphinx ext intersphinx在我的项目中并添加了以下配置 intersphinx mapping python https docs python org 3 None pyserial https pythonho
  • symfony2:如何在翻译中包含换行符/换行符?

    我该如何在 Symfony 2 4 中获得换行符 messages de yml foo Hello i am a line Hello i am a new line and messages de yml foo gt Hello i
  • 处理取消令牌源的正确模式

    考虑这样一个场景 您需要完成一些异步工作 并且可以在即发即忘模式下运行它 此异步工作能够侦听取消 因此您可以向其传递取消令牌以便能够取消它 在给定时刻 我们可以决定通过使用从中获取取消令牌的取消令牌源对象来请求取消正在进行的活动 因为取消令
  • 所有子类的 C++ 模板专门化

    我需要创建一个像这样的模板函数 template
  • 如何在 Rails 中发现模型属性?

    我发现很难轻松地查看所有模型类中存在哪些属性 属性 因为它们没有在我的类文件中明确定义 为了发现模型属性 我保持 schema rb 文件打开 并在它和我根据需要编写的任何代码之间切换 这可以工作 但很笨重 因为我必须在读取架构文件以获取属
  • Google 地图 api-3:更改多边形的默认光标

    例如 我可以更改地图的draggableCursor 但即使我更改它 多边形的光标仍然是指针 因为地图位于多边形后面 我想将多边形的光标设置为 移动 以便明确多边形是可拖动的 更改多边形光标的正确方法是什么 有一个属性或方法可以做到这一点吗
  • 在 ASP.NET Core 中使用防伪 cookie,但使用非默认 CookieName

    我正在考虑更改 ASP NET Core 中默认防伪 cookie 的名称 我想更改 cookie 名称的原因是为了使 cookie 匿名化 在我看来 最终用户没有理由能够确定此 cookie 的责任 Microsoft AspNetCor