ホームページ php教程 PHP源码 PHP はユーザーがフォームを繰り返し送信できないようにします

PHP はユーザーがフォームを繰り返し送信できないようにします

Nov 09, 2016 am 09:26 AM

フォームを送信する際、無視できない制限の 1 つは、ユーザーが送信ボタンを連続してクリックしたり、攻撃者が悪意を持ってデータを送信したりする可能性があるため、ユーザーがフォームを繰り返し送信できないようにすることです。データベースにデータを変更または追加すると問題が発生するためです。

それでは、フォームが繰り返し送信される現象を回避するにはどうすればよいでしょうか?多くの側面から始めることができます:
まず、フロントエンドに制限を加えます。ボタンが 1 回クリックされると、フロントエンド JavaScript が無効になります。この方法は単に送信ボタンの複数回のクリックを防止するだけですが、ユーザーが JavaScript スクリプトを無効にすると機能しないという欠点があります。
2 番目に、送信後にページをリダイレクトできます。つまり、送信後に新しいページにジャンプできます。これにより、主に F5 キーの繰り返しの送信が回避されますが、欠点もあります。
第三に、データベースには一意のインデックス制約があります。
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{ 
?>  
    <form method="post" action="">  
    <input type="hidden" name="token" value="<?php echo $_SESSION[&#39;token&#39;]?>">  
    <input type="text" class="input" name="web" value="www.jb51.net">  
    <input type="submit" class="btn" value="提交" />  
    </form> 
<?php 
} 
?>  
ログイン後にコピー

上記は、フォームの重複送信を防ぐための簡単な例です。
その後、実際のプロジェクト開発では、フォーム トークンはより複雑に処理されます。これをトークン検証と呼びます。可能な加工 ソース ドメイン、つまりソースが外部送信であるかどうかを確認すること、実行されるアクション (追加、変更、削除) を照合すること、次に最も重要なことはトークンを構築することです。可逆暗号化アルゴリズムを使用します。 平文はまだ安全ではないため、できるだけ複雑にしてください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)