Значение сгенерированного токена CSRF в сеансе не сохраняется - PullRequest
0 голосов
/ 19 апреля 2019

Я пишу приложение в PHP 7.3, где пользователи создают для отправки данных с помощью форм.Эти формы должны быть защищены с помощью CSRF.

Когда запрос сделан, я хочу сначала попытаться проверить токен CSRF ($ _SESSION против $ _POST или $ _GET) и сохранить результат в переменной.Затем я хочу сгенерировать новый токен и сохранить его в $ _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

Что я делаю не так?

...