0

我可能会以错误的方式解决这个问题。我有一个收集信息的 php 表单。提交后显示验证信息。然后,当您提交表单时,它会发送到另一个 php 脚本进行处理。

我想添加一个从表单传递到验证表单的令牌/密钥,以确保两者仍然在我的网站上,然后从验证表单到最终的 php 脚本进行处理。

这看起来像答案:如何为检查请求的来源提供更多安全性

但我无法让它发挥作用,而且我没有足够的声誉来发表评论。所以出于纯粹的挫败感,我在这里发布我作为我的问题的副本。

答案说以以下形式使用它:

<?php
    session_start();
    $csrfToken = md5(uniqid(mt_rand(),true)); // Token generation updated, as suggested by The Rook. Thanks!

    $_SESSION['csrfToken'] = $token;
?>
<form action="formHandler.php">
   <input type="hidden" name="csrfKey" value="<?php echo $csrfToken ?>" />
</form>

表单处理程序中的 this:

<?php
   session_start();
   if($_POST['csrfKey'] != $_SESSION['csrfKey']) {
      die("Unauthorized source!");
   }
?>

它不起作用。我的问题是不$_SESSION['csrfToken'] = $token;应该$_SESSION['csrfToken'] = $csfrToken;

if($_POST['csrfKey'] != $_SESSION['csrfKey'])应该if($_POST['csrfKey'] != $_SESSION['csrfToken'])

虽然我已经尝试过了,但它也不起作用。

我完全不知所措。

4

1 回答 1

1

清理错别字和名称混合,应该像这样工作:

<?php
session_start();
$csrfToken = md5(uniqid(mt_rand(),true));
$_SESSION['csrfToken'] = $csrfToken;
?>
<form action="formHandler.php">
<input type="hidden" name="csrfToken" value="<?php echo $csrfToken?>" />
</form>

而不是在验证提交的数据时:

<?php
session_start();
if($_POST['csrfToken'] != $_SESSION['csrfToken']) {
  die("Unauthorized source!");
}
?>
于 2013-07-24T19:41:12.630 回答