私はユーザー ディスカッション Web サイトを持っています。私のウェブサイトにはたくさんのスレッドがあります。一部のユーザーがスレッドを開くと、コメント フォームで使用される 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']
開いた場合、 の値は最後のページから生成された値になり、以前に開いたすべてのページは の $token 値を失うこと$_SESSION['token']
です。そのため、ユーザーが以前に開いたページからコメントを投稿しようとすると、失敗します。
この問題の解決策は何ですか?