会话中生成的CSRF令牌的值不持久

时间:2019-04-18 21:44:33

标签: php session csrf

我正在用PHP 7.3编写应用程序,其中用户表单可以使用表单提交数据。这些表格必须使用CSRF保护。

发出请求时,我想首先尝试验证CSRF令牌(针对$ _POST或$ _GET的$ _SESSION)并将结果存储在变量中。 然后,我想生成一个新令牌并将其存储在$ _SESSION中。

该应用程序的逻辑是验证CSRF,生成新的CSRF,检查是否进行POST以及验证是否成功,回显多种形式以输出。

我试图简化代码,但是我只能访问一台服务器,因此无法测试这是编码错误还是服务器错误。

<?php

session_start();

echo $_SESSION["a"];
$validateCsrf = false;
if (!empty($_POST["a"]) && $_SESSION["a"] === $_POST["a"]) {
    $validateCsrf = true;
}

$_SESSION["a"] = random_int(100000000,999999999);
echo $_SESSION["a"];

?>

我希望此输出首先显示旧的CSRF令牌,然后显示新的CSRF令牌。如果重新加载页面,则第二个令牌应“移动”到第一个位置,因为它已成为要验证的旧令牌,但是不会发生其他输出。

示例输出:

209959590 576642097
534067777 374285992

预期输出:

209959590 576642097
576642097 374285992

我在做什么错了?

0 个答案:

没有答案