php - CSRF Token保护的意义何在?

标签 php csrf csrf-protection csrf-token

我读了很多这方面的内容,但我仍然不明白。假设我有一个域,其中的表单仅供经过身份验证的用户对某种内容发表评论:

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” token 值未发送或无效,post_comment.php 将拒绝任何请求。因此,我们正在阻止攻击者使用我们的 post_comment.php。

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

最佳答案

CSRF token 是随机的,并且每个 session 都是唯一的。因此,攻击者可以获得与他/她自己的凭据链接的此 token 的值,但无法获取与潜在受害者的凭据链接的值。

关于php - CSRF Token保护的意义何在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54185299/

相关文章:

javascript - 上传前在 PHP 中过滤多个选定的文件

php - 在 PHP 中使用开放式 SSL 创建 https 网站

security - 在整个 session 中使用相同的 CSRF token 是否可以接受?

zend-framework2 - ZF2中CSRF的默认超时

java - Spring CSRF token 生命周期

php - 不接受数据库查询中的文本值,但只允许数字

php - 在第三方调用的 WebHook 中验证用户

express - SvelteKit:禁止跨站点 POST 表单提交

ruby-on-rails - 当服务器位于本地主机上时,链接到 FlightRadar24 时出现 HTTP 错误 418(茶壶错误)

php - Symfony2 : Invalid CSRF token while remember me authentication