ThinkPHP でのメソッドと自動トークン検証の例を作成する

不言
リリース: 2023-03-25 16:40:02
オリジナル
1264 人が閲覧しました

この記事では、ThinkPHP の作成メソッドと自動トークン検証を主に紹介します。これは非常に重要な目的を持っています。

この記事では、ThinkPHP の作成メソッドと自動トークン検証を例として示します。実装方法、具体的な手順は次のとおりです:

1. データテーブルの構造

ユーザーテーブルの構造は次のとおりです:

id ユーザー名 パスワード

2. ビューテンプレート部分

aoliHomeTpldefaultUsercreate .html ページは次のとおりです:

<form action="__URL__/addit" method="post">
 <input type="text" name="id" />
 <input type="text" name="username" />
 <input type="password" name="password" />
 <input type="submit" name="sub" value="提交" />
</form>
ログイン後にコピー

3. アクション部分:

aoliHomeLibAction.php ページは次のとおりです:

<?php
 class UserAction extends Action {
  function create(){
     $this->display();   
   }
   
   function addit(){
     //向表user中添加表单内容
     $user=M(&#39;user&#39;);
     $user->create();
     $user->add();
     //判断是否存在令牌验证
     if(!$user->autoCheckToken($_POST)){
       dump(&#39;no&#39;); 
     }else{
       dump(&#39;yes&#39;);   
     }
 }
?>
ログイン後にコピー

1. フォームによって送信されたデータを操作する前に、必要なデータを手動で作成する必要があることがよくあります。 、上記で送信されたフォーム データなど:

 //实例化User模型
  $user=M(&#39;user&#39;);
 
 //获取表单的POST数据
  $data[&#39;username&#39;]=$_POST[&#39;username&#39;]
  $data[&#39;password&#39;]=$_POST[&#39;password&#39;]
 
 //写入到数据库
   $user->data($data)->add();
ログイン後にコピー

添付: データ メソッドを使用して作成されたデータ オブジェクトは自動的に検証およびフィルタリングされないため、単にデータ オブジェクトを作成するだけで必要ない場合は、自分で処理する必要があります。いくつかの追加関数を実行する必要がある場合は、data メソッドを使用してデータ オブジェクトを簡単に作成できます。

2. ThinkPHP は、データ オブジェクトを迅速に作成するのに役立ちます。最も一般的なアプリケーションは、フォーム データに基づいてデータ オブジェクトを自動的に作成することです。 create メソッドによって作成されたデータ オブジェクトはメモリに保存され、実際にはデータベースに書き込まれません。

   //实例化user模型
    $user=M(&#39;user&#39;);
  
   //根据表单提交的POST数据创建数据对象,并保存在内存中,可以通过dump($user)查看
    $user=create();

   //把创建的数据对象写入数据库中
    $user->add();
ログイン後にコピー

3. create メソッドは、他のデータ オブジェクトや配列など、他の方法からのデータ オブジェクトの作成をサポートします。

   $data[&#39;name&#39;]=&#39;ThinkPHP&#39;;
   $data[&#39;eamil&#39;]=&#39;ThinkPHP@gmail.com&#39;;
   $user->create($data);

   甚至还可以支持从对象创建新的数据对象,如从user数据对象创建新的member数据对象
   $user=M(&#39;user&#39;);
   $user->find(1);
   $member=M(&#39;member&#39;);
   $member->create($user);
ログイン後にコピー

4. データ オブジェクトの作成中に、create メソッドはトークン検証、自動データ検証、フィールド タイプ検索、自動データ補完などのいくつかの意味のある作業も完了します。

このため、私たちがよく知っているトークン検証、自動検証、および自動完了機能を有効にするには、実際に create メソッドを使用する必要があります。

5. トークン検証:

機能: フォームのリモート送信やその他のセキュリティ保護を効果的に防止できます。

次の設定を config.php に追加します:

   &#39;TOKEN_ON&#39;   =>  true, //是否开启令牌验证
   &#39;TOKEN_NAME&#39;  =>  &#39;token&#39;,// 令牌验证的表单隐藏字段名称
   &#39;TOKEN_TYPE&#39;  =>  &#39;md5&#39;,//令牌验证哈希规则
ログイン後にコピー

自動トークンは、md5 暗号化文字列を現在の SESSION セッションに追加します。そして、この文字列をフォームの前の隠しフィールドのフォームに挿入します。この文字列は 2 つの場所に表示されます。1 つは SESSION 内、もう 1 つはフォーム内です。フォームを送信すると、サーバーは最初に SESSION 情報を比較し、それが正しければフォームの送信が許可され、そうでない場合は送信が許可されません。

create.htmlのソースコードを見ると、フォームの終了マークの前に自動生成される隠しフィールドがあることがわかります

<input type="hidden" name="token" value="eef419c3d14c9c93caa7627eedaba4a5" />
ログイン後にコピー

(1)隠しフィールドの位置を自分で制御したい場合は、フォーム ページに手動で追加できます。 {__TOKEN__} マークを追加すると、テンプレートの出力時にシステムが自動的に置き換えます。

(2) フォームのトークン検証がオンになっているときに個々のフォームでトークン検証機能を使用する必要がない場合は、フォーム ページに {__NOTOKEN__} を追加すると、システムは現在のフォームのトークン検証を無視します。

(3) ページ上に複数のフォームがある場合は、{__TOKEN__} 識別子を追加し、トークン検証が必要なフォームが 1 つだけであることを確認することをお勧めします。

(4) createメソッドを使用してデータオブジェクトを作成すると、同時にフォーム検証が自動的に実行されます。このメソッドを使用しない場合は、フォーム検証用のモデルのautoCheckTokenメソッドを手動で呼び出す必要があります。

if (!$User->autoCheckToken($_POST)){
// 令牌验证错误
}
ログイン後にコピー

関連する推奨事項:

Thinkphp での volist タグの使用


以上がThinkPHP でのメソッドと自動トークン検証の例を作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート