ホームページ >バックエンド開発 >PHPの問題 >php はユーザーがフォームを繰り返し送信することを禁止しています

php はユーザーがフォームを繰り返し送信することを禁止しています

藏色散人
藏色散人オリジナル
2020-08-13 10:55:162103ブラウズ

phpでの重複送信禁止の実装方法は、まずフロントエンドから制限を行い、次に送信後にリダイレクトページを作成し、次にデータベース内でユニークインデックス制約を作成し、最後にセッショントークンを検証します。

php はユーザーがフォームを繰り返し送信することを禁止しています

推奨: 「PHP ビデオ チュートリアル

フォームを送信するときは、それを無視することはできませんこの制限は、ユーザーが送信ボタンを連打したり、攻撃者が悪意を持ってデータを送信したりする可能性があり、データの修正や追加など、データ送信後の処理でトラブルが発生する可能性があるため、ユーザーがフォームを繰り返し送信できないようにするためのものです。データベースに。

では、フォームが繰り返し送信される現象を回避するにはどうすればよいでしょうか? さまざまな側面から始めることができます:

まずフロントエンドを制限します。ボタンが 1 回クリックされるとフロントエンド JavaScript が無効になります。この方法は送信ボタンの複数回のクリックを防止するだけですが、ユーザーが JavaScript スクリプトを無効にすると機能しなくなるという欠点があります。

2 番目に、送信後にページをリダイレクトできます。つまり、送信後に新しいページにジャンプします。これにより、主に F5 キーによる送信の繰り返しが回避されますが、欠点もあります。

3 番目に、データベースは一意のインデックス制約を作成します。

4 番目は、セッション トークンの検証を行うことです。

次に、セッション トークンを使用してフォームの繰り返しの送信を防ぐ簡単な方法を見てみましょう。

フォームに入力非表示フィールド、つまり type="hidden" を追加します。その値はトークン値の保存に使用されます。ページが更新されると、トークン値が変更されます。送信後、トークンの値が正しいかどうかを判断し、フロントエンドで送信されたトークンがバックエンドで送信されたトークンと一致しない場合は、重複送信とみなされます。

< ?php
/
 
 PHP简单利用token防止表单重复提交 */
session_start();
header("Content-Type: text/html;charset=utf-8");
function set_token() {
$_SESSION[&#39;token&#39;] = md5(microtime(true));
}
function valid_token() {
$return = $_REQUEST[&#39;token&#39;] === $_SESSION[&#39;token&#39;] ? true: false;
set_token();
return $return;
}
//如果token为空则生成一个token
if(!isset($_SESSION[&#39;token&#39;]) || $_SESSION[&#39;token&#39;]==&#39;&#39;) {
set_token();
}
if(isset($_POST[&#39;web&#39;])){
if(!valid_token()){
echo "token error,请不要重复提交!";
}else{
echo &#39;成功提交,Value:&#39;.$_POST[&#39;web&#39;];
}
}else{
?>
}
?>

上記は、フォームの繰り返しの送信を防ぐための簡単な例です。

実際のプロジェクト開発では、フォーム トークンはより複雑に処理されます。これをトークン検証と呼びます。可能な処理には、ソース ドメイン、つまりオリジンの検証、それが外部送信であるかどうか、実行されるアクションの照合、追加、変更、削除のいずれかが含まれます。2 番目に最も重要なことは、トークンの構築です。可逆暗号化アルゴリズムを使用できますが、平文はまだ安全ではないため、複雑になる可能性があります。

以上がphp はユーザーがフォームを繰り返し送信することを禁止していますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。