Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CSRF会话令牌_Php_Smarty - Fatal编程技术网

Php CSRF会话令牌

Php CSRF会话令牌,php,smarty,Php,Smarty,我试图在表单上实现一个简单的CSRF保护,但我无法正确实现。如果有人能指出我做错了什么,我将不胜感激 错误:每次提交表单时,我都会得到“Invalid Submission2”,因为令牌发生了更改(在提交表单之后),因为它是在同一页面上生成的 编辑——我忘了提到,另一个文件(config.php)已经有session_start() HTML(text.tpl文件) 创建帖子 您需要更改此行 $this->tpl->assign('form_token', $form_toke

我试图在表单上实现一个简单的CSRF保护,但我无法正确实现。如果有人能指出我做错了什么,我将不胜感激

错误:每次提交表单时,我都会得到“Invalid Submission2”,因为令牌发生了更改(在提交表单之后),因为它是在同一页面上生成的

编辑——我忘了提到,另一个文件(config.php)已经有session_start()


HTML(text.tpl文件)


创建帖子

您需要更改此行

$this->tpl->assign('form_token', $form_token);
进入:

这是因为您仅在以下条件下生成令牌:

if(empty($_SESSION['form_token'])) 
{
    $form_token = md5(uniqid(rand(), TRUE));
    $_SESSION['form_token'] = $form_token;
}
if(isset($err)) {
    unset( $_SESSION['form_token']);
}
并使用此条件将其取消设置:

if(empty($_SESSION['form_token'])) 
{
    $form_token = md5(uniqid(rand(), TRUE));
    $_SESSION['form_token'] = $form_token;
}
if(isset($err)) {
    unset( $_SESSION['form_token']);
}
所以,如果只发送一次表单,然后重新加载页面(不提交表单只是url),
$form\u token
变量未知,因为有
$\u会话['form\u token']
不是空的,然后在表单中有空的token

如果在PHP中打开了显示错误,则在本例中,您将在PHP中看到:

Undefined variable: form_token in 

你已经开始上课了,所以你的课读/写有效吗?检查隐藏元素中是否也有标记。是的,我忘了提到,我已经添加了session_start();在另一个文件(config.php)的其他地方。表单显示了令牌。我认为问题是因为令牌是在同一个页面中生成的,一旦表单提交,就会生成另一个令牌并检查旧令牌。。陛下
Undefined variable: form_token in