如何为php表单添加安全性


How to add security to a php form

我可能做得不对。我有一个收集信息的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'])

尽管我试过了,但也不起作用。

我完全不知所措。

清理拼写错误和名称混合,应该像这样工作:

<?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!");
}
?>