根据docs.microsoft.com,ASP.NET内核实现了同步器令牌模式以减轻CSRF。
反请求伪造机制有许多影响用户的缺点:
ex 1:在2个标签中打开的登录页面
- 在两个不同的选项卡中打开登录页面
- 用户A来自选项卡1的日志(无问题)
- 用户B在不刷新选项卡2的情况下尝试登录。
=>产生一个400页的AntiforgeryValidationException
reference 1,
reference 2
ex 2:在2个标签中打开的表单(通过邮件中的同一链接)
- 从模板(VS 2019)创建一个新的Asp.Net Core MVC网站
- 创建一个新页面,该页面具有一个简单的表单,该表单在发布时已通过[ValidateAntiForgeryToken]进行了验证。
- 通过电子邮件向您发送指向该页面的链接(我已经使用过Gmail和Mailtrap)
- 通过正常单击在两个选项卡中打开链接
- 以任意顺序提交两种表格
=>首先打开的表单会产生400错误
reference
SameSite = strict似乎是一种针对CSRF攻击的有效安全措施
根据此article和this draft RFC,SameSite cookie似乎是一种针对CSRF攻击的有效而强大的安全措施。
使用SameSite = strict配置ASP.NET Core 2.2的身份验证cookie。如果我的理解是正确的,那么身份验证cookie仅在相同站点导航的情况下才发送到服务器。
因此,如果可以保证我的用户使用的是支持SameSite策略的浏览器,是否可以安全地禁用ASP.NET Core应用程序的反CSRF机制?