【发布时间】:2013-07-24 19:32:26
【问题描述】:
我可能会以错误的方式解决这个问题。我有一个收集信息的 php 表单。提交后显示验证信息。然后,当您提交表单时,它会发送到另一个 php 脚本进行处理。
我想添加一个从表单传递到验证表单的令牌/密钥,以确保两者仍在我的网站上,然后从验证表单传递到最终的 php 脚本进行处理。
这看起来像答案:How do I provide more security for checking source of the request
但我无法让它发挥作用,而且我没有足够的声誉来发表评论。因此,出于纯粹的挫败感,我将 i 作为我的问题的副本发布在这里。
答案说要以这种形式使用:
<?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'])
虽然我已经尝试过了,但它也不起作用。
我完全不知所措。
【问题讨论】:
-
是的,这些看起来像是错别字。更正后,究竟是什么“不起作用”?
-
这是这些拼写错误的组合,而我在隐藏输入字段中使用的回显需要在我的表单案例中进行特殊格式设置。感谢您验证我的想法是正确的。