繁体   English   中英

CSRF令牌保护的意义是什么?

[英]What is the sense of the CSRF Token protection?

我已经阅读了很多关于此的内容,但我仍然不理解。 假设我有一个域,该域的表单仅用于经过身份验证的用户才能对某种内容发表评论:

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_comment.php? 我想念什么?

CSRF令牌在每个会话中都是随机且唯一的。 因此,攻击者可以获得此令牌的值,该令牌链接到他/她自己的凭据,而不链接到潜在受害者的凭据。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM