如何为php表单添加安全性

时间:2013-07-24 19:32:27

标签: php security

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

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

这看起来像答案:How do I provide more security for checking source of the request

但我无法让它发挥作用,而且我没有足够的声誉来发表评论。因此,出于纯粹的挫折感,我在这里发帖与我的问题重复。

答案是以形式使用它:

<?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>

表单处理程序中的这个:

<?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'])

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

我完全失去了。

1 个答案:

答案 0 :(得分: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!");
}
?>