В настоящее время происходит то, что веб-страница загружается, генерирует новый токен CSRF, назначает его переменной SESSION, а также добавляет его к скрытому вводу. Он отправляет его в php-файл, где он проверяется, а затем переменную csrf SESSION для сброса / сброса. Но происходит то, что токен SESSION, похоже, не обновляется при отправке запроса, а происходит обновление до предыдущего токена. Скажем по запросу 1. Оба токена отправлены отлично. Перезагрузите страницу, затем отправьте, и мы видим только токен во входном обновлении, сеанс остается тем же. По запросу 3 сеанс обновляется до токена запроса 2 и не обновляется до запроса 3s токена. Его возвращение на шаг позади. Почему это так, кто-нибудь может мне помочь с моим кодом?
HTML-файл:
<form action="file.php" method="POST">
<input type="text" name="field1">
<input type="text" name="field2">
<?php
session_start();
$CSRFToken = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
$_SESSION["register-csrf-token"] = $CSRFToken;
echo'<input type="hidden" name="csrf-token" value="' . $CSRFToken . '">';
?>
<button type="submit">Submit</button>
</form>
PHP-файл:
<?php
// Hash Equals Function
if(!function_exists('hash_equals')) {
function hash_equals($str1, $str2) {
if(strlen($str1) != strlen($str2)) {
return false;
} else {
$res = $str1 ^ $str2;
$ret = 0;
for($i = strlen($res) - 1; $i >= 0; $i--) $ret |= ord($res[$i]);
return !$ret;
}
}
}
session_start();
$CSRFToken = $_POST["csrf-token"];
$field1 = $_POST["field1"];
$field2 = $_POST["field2"];
// Validating CSRF-Token
if (hash_equals($_SESSION["register-csrf-token"], $CSRFToken)) {
unset($_SESSION['register-csrf-token']);
} else {
echo "csrfTokenExpired";
die();
}
?>
Это также можно увидеть в действии на моем сайте:
http://fortniteprosnipes.x10.bz/register/