繁体   English   中英

ASP.NET Core 2.0中的防伪cookie

[英]Antiforgery cookie in ASP.NET Core 2.0

我一直在试图确切地了解反伪造的工作原理。 使我感到困惑的是创建的cookie。 据我了解,您在表单中包含了防伪令牌,然后在发出请求时验证该令牌。 这样,如果第三方网站发布到您的网站,它将被拒绝。

现在,我在这里阅读https://docs.microsoft.com/zh-cn/aspnet/core/security/anti-request-forgery?view=aspnetcore-2.1防伪令牌存储在cookie中,也许我读错了吗? 但为什么? 难道不是要不要在您的网站之外访问此值? 如果查看cookie,我会看到3个以伪造名称创建的cookie。

services.AddAntiforgery(options => 
{
    options.CookieDomain = "contoso.com";
    options.CookieName = "X-CSRF-TOKEN-COOKIENAME";
    options.CookiePath = "Path";
    options.FormFieldName = "AntiforgeryFieldname";
    options.HeaderName = "X-CSRF-TOKEN-HEADERNAME";
    options.RequireSsl = false;
    options.SuppressXFrameOptionsHeader = false;
});

我做了一些测试,创建了一个邮寄表格,最终包含了防伪令牌,然后我尝试将其提交并成功了。 然后,我创建了另一个没有令牌的表单,但失败了。 所以对我来说,它似乎只查找在表单中传递的令牌,那么cookie的作用是什么?

反伪造是一个分为两部分的过程。 生成页面时,令牌将作为表单的一部分包括在内,以便将其与您的其余数据一起发布。 cookie是针对事物的客户端设置的。 当柱制成,客户端发送请求与所述柱的数据(包括令牌),并将其发送该cookie返回到服务器,其中还包括该令牌。 在服务器端,发布的令牌与cookie令牌匹配,并且如果两者不匹配则被拒绝。

这似乎很奇怪,因为客户端同时发布了这两个消息,但是cookie部分确保了获得该页面的同一客户端也是将该页面发回的同一客户端。 目的不是要保护反伪造令牌,而是要确保您网站上的页面是已提交的页面,而不是某些诈骗者重新创建的页面版本。 由于第三方将无法为您的域设置Cookie,因此即使他们能够通过请求并解析令牌从页面中检索到有效令牌,也无法伪造这部分支票。

从asp.net核心网站AntiforgeryOptions.Cookie属性 仅当使用基于cookie的身份验证时,才需要CSRF的cookie部分。

反伪造系统使用的cookie是使用基于cookie的身份验证时必需的安全系统的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM