フォームを送信するとき、無視できない制限の 1 つは、ユーザーが送信ボタンをクリックする可能性があるため、ユーザーがフォームを繰り返し送信できないようにすることです。継続的にデータを送信したり、攻撃者が悪意を持ってデータを送信したりすると、データを送信した後の処理(データベースへのデータの変更や追加など)で問題が発生します。
レンダリング:
それでは、フォームが繰り返し送信される現象を回避するにはどうすればよいでしょうか?さまざまな側面から始めることができます:
まず、フロントエンドから制限を作成します。ボタンが 1 回クリックされると、フロントエンド JavaScript が無効になります。この方法は単に送信ボタンの複数回のクリックを防止するだけですが、ユーザーが JavaScript スクリプトを無効にすると機能しないという欠点があります。
2 番目に、送信後に ページのリダイレクト を実行できます。つまり、送信後に新しいページにジャンプします。これにより、主に F5 キーによる送信が回避されますが、欠点もあります。
第三に、データベースは一意のインデックス制約です。
4 番目は、セッション トークンの検証を行うことです。
次に、セッション トークンを使用してフォームの繰り返し送信を防ぐ方法を学びましょう。
フォームに入力非表示フィールド (type="hidden") を追加します。このフィールドの値は、ページが更新されたときにトークン値が変更されるかどうかを判断します。値が正しい場合、フロントデスクによって送信されたトークンが背景と一致しない場合、それは重複送信とみなされます。
上記は、フォームの重複送信を防ぐための簡単な例です。
その後、実際のプロジェクト開発では、トークン検証と呼ばれる、フォームトークンのより複雑な処理が実行されます。考えられる処理には次のものが含まれます: ソース ドメイン、ソースが外部送信であるかどうかを確認する、実行するアクションを一致させる、2 番目に重要なことは、 token、平文はまだ安全ではないため、トークンは可能な限り複雑な可逆暗号化アルゴリズムを使用できます。
上記は、ユーザーがフォームを繰り返し送信できない問題を解決する方法です。皆さんの学習に役立つことを願っています。