我可能做得不对。我有一个收集信息的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!");
}
?>