У меня есть сайт для обсуждения пользователей. На моем сайте очень много тем. Когда какой-либо пользователь открывает поток, генерируется токен безопасности CSRF для использования в форме комментария.
if (!isset($_SESSION['token'])) {
$token = md5(uniqid(rand(), TRUE));
$_SESSION['token'] = $token;
$_SESSION['token_time'] = time();
}
else
{
$token = $_SESSION['token'];
}
Я использую этот токен безопасности в форме комментария, как это
<form action="comment.php" method="post">
<input type="hidden" name="token" value="<?php echo $token; ?>" />
<input type="text" name="comment_body" value="" />
</form>
и на приемном конце
if ($_POST['token'] == $_SESSION['token']){
/* Valid Token */
}
Теперь проблема заключается в том, что если пользователь открывает более одного потока (страницы), значение в $_SESSION['token']
будет значением, сгенерированным на последней странице, и все ранее открытые страницы потеряют значение токена $ в $_SESSION['token']
. Итак, если пользователь попытается оставить комментарий с ранее открытых страниц, он потерпит неудачу.
Каково решение этой проблемы?