首页 文章

ASP.NET Core 2.0中的防伪cookie

提问于
浏览
1

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

现在,我正在这里阅读https://docs.microsoft.com/en-us/aspnet/core/security/anti-request-forgery?view=aspnetcore-2.1,反伪造令牌存储在一个cookie中,也许我认为这不是为了让你的网站外可以访问这个值吗?如果我查看我的 Cookies ,我可以看到他们名字中使用防伪剂创建的3个 Cookies .

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?

2 回答

  • 0

    防伪是一个由两部分组成的过程 . 生成页面时,令牌将作为表单的一部分包含在内,以便与其他数据一起发布 . 为客户端设置cookie . 当发布帖子时,客户端发送带有帖子数据(包括令牌)的请求,并将cookie发送回服务器,服务器也包括令牌 . 在服务器端,发布的令牌与cookie令牌匹配,如果两者不匹配则拒绝 .

    这可能看起来很奇怪,因为客户端都发布了这两个,但cookie部分确保获取该页面的同一客户端也是发回它的同一客户端 . 目标不是保护防伪令牌,而是确保您网站上的页面是提交的页面,而不是某些骗子重新创建的页面版本 . 由于第三方无法为您的域设置cookie,因此他们无法伪造支票的这一部分,即使他们能够通过请求并解析令牌从页面中检索有效令牌 .

  • 2

    来自asp.net核心网站AntiforgeryOptions.Cookie Property . 只有在使用基于cookie的身份验证时,才需要CSRF的cookie部分 .

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

相关问题