Boj*_*jan 6 c# asp.net asp.net-mvc asp.net-core-mvc asp.net-core-2.0
我一直在试图准确地了解防伪是如何工作的。让我感到困惑的是创建的 cookie。据我了解,您在表单中包含防伪令牌,然后在发出请求时验证该令牌。这样,如果第三方网站发布到您的网站,它将被拒绝。
现在,我在这里阅读https://docs.microsoft.com/en-us/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;
});
Run Code Online (Sandbox Code Playgroud)
我做了一个小测试,我创建了一个帖子表单,最终包含防伪令牌,然后我尝试提交它并且它起作用了。然后我创建了另一个没有令牌的表单,然后它失败了。所以对我来说,它似乎只查找表单中传递的令牌,那么 cookie 是做什么用的?
防伪是一个由两部分组成的过程。生成页面时,令牌将作为表单的一部分包含在内,因此它将与您的其余数据一起发布。cookie 是为客户端设置的。当柱制成,客户端发送与所述柱数据的请求(包括令牌)和其发送该cookie返回到服务器,其中还包括该令牌。服务器端,发布的令牌与 cookie 令牌匹配,如果两者不匹配,则拒绝。
这可能看起来很奇怪,因为客户端同时发布两者,但 cookie 部分确保获取页面的同一客户端也是将其发回的同一客户端。目标不是保护防伪令牌,而是确保您网站上的页面是提交的页面,而不是某个骗子重新创建的页面版本。由于第三方无法为您的域设置 cookie,因此他们无法伪造检查的这一部分,即使他们能够通过请求并解析令牌从您的页面检索有效令牌。
| 归档时间: |
|
| 查看次数: |
4492 次 |
| 最近记录: |