通过发送 validatecookie 作为参数来保护网站免受 CSRF 攻击?

Protecting website from CSRF by sending the validatecookie as parameter?

据我了解,CSRF-攻击是这样的:

  1. 当您检查用户是否登录到您的网站时,您检查是否设置了验证 cookie 并与数据库匹配。
  2. 第三部分将用户引导至您网站中的站点,例如 "changePassword.php"
  3. 站点 "changePassword.php" 将通过检查 cookie 是否与数据库匹配来检查用户是否已登录,如果已设置,页面将 "change the password"。
    已设置,因为您在另一个选项卡中登录网站,因此密码将被更改。

为防止此网站使用由网页随机生成并存储为会话的 Token,然后您的网页发送此 token 与请求一起作为参数。因为这让网站知道用户确实访问了网站并执行了操作。

问题是:

而不是发送 令牌 作为 参数 。您可以将 登录的 cookie 作为 参数 发送吗?

由于 cookie 是特定于网站的,我看不出有什么方法可以让另一个页面将此 cookie 作为参数发送到您的网站。

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

是的,你可以,假设 "logged in cookie" 是一个加密安全会话标识符。

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

Double submitting cookies is defined as sending a random value in both a cookie and as a request parameter, with the server verifying if the cookie value and request value are equal.

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

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

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