手动设置cookie值以禁用Anti-forgery Token?

时间:2017-08-27 14:54:09

标签: asp.net asp.net-mvc cookies

我仍然不了解Anti-forgery Token在MVC中是如何工作的。 来自MSDN

防伪标记

为了帮助防止CSRF攻击,ASP.NET MVC使用了防伪令牌,也称为请求验证令牌。

  1. 客户端请求包含表单的HTML页面。
  2. 服务器在响应中包含两个令牌。一个令牌作为cookie发送。另一个放在隐藏的表单字段中。令牌是随机生成的,因此攻击者无法猜测值。
  3. 当客户端提交表单时,它必须将两个令牌发送回服务器。客户端将cookie令牌作为cookie发送,并在表单数据中发送表单令牌。 (当用户提交表单时,浏览器客户端会自动执行此操作。)
  4. 如果请求不包含这两个令牌,则服务器不允许该请求。
  5. 以下是带有隐藏表单标记的HTML表单示例:

    <form action="/Home/Test" method="post">
    <input name="__RequestVerificationToken" type="hidden"   
           value="6fGBtLZmVBZ59oUad1Fr33BuPxANKY9q3Srr5y[...]" />    
    <input type="submit" value="Submit" />
    

    我的问题是,因为我们可以通过查看源代码(任何浏览器中的F12)轻松找到隐藏的令牌值。然后我们可以通过转到开发人员工具(Ctrl-Shift-J或工具 - >开发人员工具)手动设置cookie - &gt;控制台和你可以输入javascript命令:

    的document.cookie =&#34; keyofcookie = valueofcookie&#34;

    然后我们手动设置令牌相同,以禁用Anti Forgery技术?

2 个答案:

答案 0 :(得分:1)

该cookie是HttpOnly并且无法从javascript设置,因为所有最新的浏览器都实现了HttpOnly。此外,cookie令牌和表单令牌都包含不同的基本64加密信息。解密将是服务器端的东西。

Moreso,这些代币不是为了平等而进行比较的。它们相互补充数据。另外,您没有阅读完整的文章。 MVC也有自己的方法来验证令牌。

检查以下链接是否有帮助。

https://www.codeproject.com/Articles/793384/ASP-NET-Anti-Forgery-Tokens-internals

答案 1 :(得分:0)

正如documentation所说:

  

防伪令牌的工作原因是恶意页面无法读取   用户的令牌,由于同源策略。 (Same-origin policies   防止托管在两个不同站点上的文档访问每个站点   其他内容。所以在前面的例子中,恶意页面可以   向example.com发送请求,但无法读取响应。)

这意味着,由于上述政策,复制cookie值并将其用于任何其他位置将无效。