我正在用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
我在做什么错了?