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