需要PHP表单令牌帮助

时间:2014-06-24 22:38:07

标签: php forms token

我有一个问题,我希望有人能够提供帮助。 我试图实现一个令牌系统(使用php),但由于某种原因,它一直在失败。

这是我在HTML表单中放置的代码(我也尝试将代码放在表单标记中)

// --------------------------------------------- ----

<?php
 session_start();
$form_token = uniqid();
$_SESSION['form_token'] = $form_token;
?>

// --------------------------------------------- ---------

表格上还有一个隐藏字段

<input type="hidden" name="form_token" value="<?php echo $form_token; ?>" />

// --------------------------------------------- -------------

在对表单进行求和时,将运行以下脚本:

<?php
 session_start();
if(isset($_POST['sumbitcheck'])) {
include('connect.php'); 
    }

if ($_POST['form_token'] !== $_SESSION['token'])
        {
    echo("Invalid Submission");        
        }

if($_POST['form_token']== $_SESSION['form_token'])
        {
     echo("Accees");
        }

?>

// -------------------------------------------- < / p>

出于某种原因,它回复了无效的提交内容。并且匹配从不=真可以有人帮忙吗?

非常感谢,

3 个答案:

答案 0 :(得分:1)

此:

$_POST['form_token'] !== $_SESSION['token']

应该是:

$_POST['form_token'] !== $_SESSION['form_token']

这是因为您提交的名称为form_token的隐藏字段,而不是token

如果你愿意,你可以这样做:

<input type="hidden" name="token" value="<?php echo $form_token; ?>" />

在这种情况下,您当前的代码会起作用。

答案 1 :(得分:0)

因为这......

if ($_POST['form_token'] !== $_SESSION['token'])

需要这样......

if ($_POST['form_token'] !== $_SESSION['form_token'])

答案 2 :(得分:0)

改变这个:

if ($_POST['form_token'] !== $_SESSION['token'])

对此:

if ($_POST['form_token'] !== $_SESSION['form_token'])

另外,查看uniqid()函数的手册。它不应该用于安全目的。