1

私はこのビットのスクリプトを持っています:

if (isset($_POST['comment_posted'])) {
    $user_comment = mysql_real_escape_string($_POST['user_comment']);
    $add_user_comment = Event::addUserComment($id,$user->user_id,$user_comment);
}

ユーザーがコメントを送信してページを更新すると、「投稿データを再送信しようとしています」という警告が表示されます。ユーザーが同意すると、ユーザーのコメントが再挿入されます。

header関数を使用して追加し、メンバーを同じページにリダイレクトすることでそれを防ぐことができることを理解しています。メンバーをリダイレクトせずにこの問題を解決することは可能ですか?

4

2 に答える 2

2

いいえ。post -redirect-get を実行するか、その後の更新でこのダイアログがユーザーに表示されます。

PRG を実行しないことを選択した場合は、送信が重複していることを何らかの形で検出する必要があります。簡単な方法の 1 つは、隠しパラメータにランダムなハッシュ/番号 (たとえば、トークンと呼ばれる) を挿入することです。送信時に、期待するトークン (おそらく http セッションに保存されている) が他の POST パラメーターと一緒に送信されていることを確認する必要があります。有効な送信時に、このトークンを削除/無効にします。そのようにして、認識されていないトークンの POST が来ると、それはおそらく重複または期限切れのリクエストです。

これを正しく実装すれば、アプリケーションをcsrf攻撃に対して証明することもできます。

于 2011-01-30T12:12:08.910 に答える
0

送信が成功した後、いくつかのセッション変数を設定できます。送信ごとに、変数が設定されているかどうかを確認し、データを挿入します。

于 2011-01-30T12:14:10.577 に答える