通过发送validatecookie作为参数来保护网站免受CSRF的影响?

时间:2015-04-13 17:03:26

标签: php ajax cookies csrf

我所理解的, CSRF - 攻击的工作原理如下:

  1. 当您检查用户是否已登录您的网站时,您会检查是否设置了验证Cookie 并与数据库匹配。
  2. 第三部分将用户发送到您网站的网站,例如“changePassword.php”
  3. 网站“changePassword.php”将通过检查Cookie是否与数据库匹配来检查用户是否已登录,如果已设置,则该页面将“更改密码”。
    由于您在另一个选项卡中登录了该网站,因此密码将被更改。
  4. 为防止此网站使用网页随机生成的令牌并存储为会话,您的网页会将此令牌与请求一起发送,如一个参数。由于这使网站知道用户真正访问过网站并执行了操作。

    问题是:

    而不是发送令牌作为参数。您能否将已登录的Cookie 作为参数发送

    由于Cookie是特定于网站的,因此我无法看到其他网页可以将此Cookie作为参数发送到您的网站。

2 个答案:

答案 0 :(得分:2)

是的,您可以,假设“登录的cookie”是加密安全的会话标识符。

这种CSRF防御方法称为Double Submit Cookies

  

双重提交cookie定义为在两者中发送随机值   一个cookie和一个请求参数,服务器验证是否   cookie值和请求值相等。

通常此值与会话ID分开,但如果会话ID是静态的,则没有理由不使用它。

在CSRF攻击中,攻击者只能使用受害者的浏览器将受害者的cookie提交到目标站点。攻击者无法实际读取cookie值,也无法将此值的副本设置为POST参数。因此,双提交cookie是一个很好的CSRF防御。

请注意,建议不要使用GET参数,因为此值可能会泄漏到the referer header

答案 1 :(得分:0)

我发现为什么这不起作用,如果你发送你的cookie作为参数,攻击者总会有办法使用它(jquery?)函数,或类似的。因此,您始终必须从网页获取令牌。您可以打印cookie然后以这种方式获取它,但是将会话令牌作为网站的隐藏输入会更容易。