1

私はユーザー ディスカッション 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']です。そのため、ユーザーが以前に開いたページからコメントを投稿しようとすると、失敗します。

この問題の解決策は何ですか?

4

0 に答える 0