【问题标题】:What is the sense of the CSRF Token protection?CSRF Token保护的意义是什么?
【发布时间】:2019-01-14 16:19:16
【问题描述】:

我已经阅读了很多关于此的内容,但我仍然不明白。假设我有一个域,其表单仅供经过身份验证的用户在某种内容上发布 cmets:

my_form.php

<form action="post_comment.php" method="post">
  <textarea name="comment"></textarea>
  <input type="hidden" name="csrf_token" value="<?php print $csrf_token; ?>" />
  <input type="submit" value="Post" />
</form>

post_comment.php

<?php

  if(!isset($_POST['csrf_token']) || !CSRFToken::validate($_POST['csrf_token'])){
    print "Invalid CSRF-Token!";
    exit;
  }
  [...]
?>

如果“csrf_token”令牌值未发送或无效,post_comment.php 将拒绝任何请求。因此,我们正在阻止攻击者使用我们的 post_comment.php。

但是如何防止攻击者获取 /my_form.php,从表单中读取 csrf_token 值并使用它 POST 到 post_comment.php?我错过了什么?

【问题讨论】:

标签: php csrf csrf-protection csrf-token


【解决方案1】:

CSRF 令牌在每个会话中是随机且唯一的。因此,攻击者可以获得与他/她自己的凭据相关联的令牌的值,但不能与潜在受害者的凭据相关联。

【讨论】:

  • “CSRF 令牌是随机的,并且每个会话都是唯一的” - 这意味着它存储在 $_SESSION 中,并且它的 那个 值与需要时$_GET$_POST 值;如果它们不匹配,则可以中止操作(因为请求可能来自不同/未经验证的用户) - 只是拼写出来;)
【解决方案2】:

CSRF 是一种攻击,受害者登录您的站点(具有会话 cookie),当您没有会话时,则不需要 CSRF。 受害者使用相同的浏览器访问另一个邪恶的网站。 该站点现在可以向您的站点发出 post 请求(使用 cookie 并因此登录受害者),您可以使用 CSRF 令牌来阻止它,因为虽然恶意站点可以使用 cookie 发送请求,但它无法读取请求的响应(同源政策)。 您可以在您的(个人)浏览器中关闭此行为,但默认情况下它是启用的,因为某些应用程序依赖它。

【讨论】:

    猜你喜欢
    • 2018-01-29
    • 2012-05-01
    • 2015-11-01
    • 2022-11-09
    • 2017-10-09
    • 2015-09-13
    • 1970-01-01
    • 2015-09-17
    • 2012-01-28
    相关资源
    最近更新 更多