Maison  >  Article  >  développement back-end  >  Créer des exemples de méthodes et de vérification automatique de jetons dans ThinkPHP

Créer des exemples de méthodes et de vérification automatique de jetons dans ThinkPHP

不言
不言original
2018-05-08 14:35:001210parcourir

Cet article présente principalement la méthode create dans ThinkPHP et la méthode d'implémentation de la vérification automatique des jetons. Il a un objectif très important. Les amis dans le besoin peuvent s'y référer

Cet article montre la méthode create dans ThinkPHP. sous forme d'exemple. Méthode et mise en œuvre de la vérification automatique des tokens, les étapes spécifiques sont les suivantes :

1. Structure de la table de données

La structure de la table utilisateur est la suivante. suit :

identifiant nom d'utilisateur mot de passe

2. Afficher la partie du modèle

la page aoliHomeTpldefaultUsercreate.html est la suivante :

<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. Partie action :

La page aoliHomeLibAction.php est la suivante :

<?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. Avant d'exploiter les données soumises par le formulaire, nous devons souvent le faire. créez manuellement les données requises, telles que les données du formulaire soumises ci-dessus :

 //实例化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();

Pièce jointe : les objets de données créés à l'aide de la méthode des données ne seront pas automatiquement vérifiés et filtrés et devront être traités par vous-même. je veux simplement créer un objet de données et n'ai pas besoin de remplir certaines fonctions supplémentaires, les objets de données peuvent être simplement créés à l'aide de la méthode data.

2. ThinkPHP peut nous aider à créer rapidement des objets de données. L'application la plus courante consiste à créer automatiquement des objets de données basés sur les données d'un formulaire. L'objet de données créé par la méthode create est stocké en mémoire et n'est pas réellement écrit dans la base de données.

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

   //把创建的数据对象写入数据库中
    $user->add();

3. La méthode create prend en charge la création d'objets de données par d'autres moyens, par exemple à partir d'autres objets de données ou tableaux, etc.

   $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. Lors de la création de l'objet de données, la méthode create effectue également un travail significatif, notamment la vérification des jetons, la vérification automatique des données, la recherche de type de champ, la complétion automatique des données, etc.

Pour cette raison, les fonctions de vérification des jetons, de vérification automatique et d'achèvement automatique que nous connaissons doivent en fait utiliser la méthode create pour prendre effet.

5. Vérification des jetons :

Fonction : Elle peut empêcher efficacement la soumission à distance de formulaires et d'autres protections de sécurité.

Ajoutez la configuration suivante à config.php :

   &#39;TOKEN_ON&#39;   =>  true, //是否开启令牌验证
   &#39;TOKEN_NAME&#39;  =>  &#39;token&#39;,// 令牌验证的表单隐藏字段名称
   &#39;TOKEN_TYPE&#39;  =>  &#39;md5&#39;,//令牌验证哈希规则

Le jeton automatique mettra une chaîne cryptée md5 dans la session SESSION en cours. Et insérez cette chaîne dans le formulaire d'un champ caché avant le formulaire. Cette chaîne apparaît à deux endroits, l'un dans la SESSION et l'autre dans le formulaire. Lorsque vous soumettez le formulaire, la première chose que fait le serveur est de comparer les informations de SESSION Si elles sont correctes, le formulaire peut être soumis, sinon il n'est pas autorisé à être soumis.

En regardant le code source de create.html, vous verrez qu'il y aura un champ caché généré automatiquement avant la marque de fin du formulaire

<input type="hidden" name="token" value="eef419c3d14c9c93caa7627eedaba4a5" />

(1), si vous souhaitez le contrôler vous-même Pour masquer l'emplacement du champ, vous pouvez ajouter manuellement la marque {__TOKEN__} sur la page du formulaire, et le système la remplacera automatiquement lors de la sortie du modèle.

(2) Si les formulaires individuels n'ont pas besoin d'utiliser la fonction de vérification des jetons
lorsque la vérification des jetons de formulaire est activée, vous pouvez ajouter {__NOTOKEN__} à la page du formulaire et le système ignorera le courant. formulaire. Vérification du jeton.

(3) S'il y a plusieurs formulaires sur la page, il est recommandé d'ajouter l'identifiant {__TOKEN__} et de s'assurer qu'un seul formulaire nécessite une vérification du jeton.

(4) Si vous utilisez la méthode create pour créer un objet de données, la vérification du formulaire sera automatiquement effectuée en même temps. Si cette méthode n'est pas utilisée, vous devez appeler manuellement la méthode autoCheckToken du modèle. pour la vérification du formulaire.

if (!$User->autoCheckToken($_POST)){
// 令牌验证错误
}

Recommandations associées :

Utilisation de la balise volist dans Thinkphp


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn