Maison >développement back-end >tutoriel php >Utilisez le framework TP pour imiter l'injection d'attaque SQL

Utilisez le framework TP pour imiter l'injection d'attaque SQL

韦小宝
韦小宝original
2018-03-14 10:51:104208parcourir

Imitersqlinjection

SEO :

1, si optimisée, la partie titre est très importante, utilisée pour optimiser les mots-clés de notre site internet

Les moteurs de recherche classeront votre site Web en fonction de mots-clés. Si le poids du site Web est élevé, lorsque les utilisateurs recherchent des mots-clés, ils verront votre site Web en premier

2, le Japon et le site --- pointent vers le site anglais, indiquant que le site japonais a voté pour le site anglais, si vous donnez le site anglais Plus il y a de votes vous lancez un casting, meilleur est le site Web en anglais

Prévenir l'injection SQL :

1, créez un formulaire de connexion utilisateur

select() interrogera tous les enregistrements

find() n'interrogera qu'un seul enregistrement

Écrivez une simple vérification du nom d'utilisateur, écrivez 'ou 1 ou' dans le formulaire du nom d'utilisateur, .

Question : Pourquoi a-t-il réussi sans vérification ?

echo $model->getLastsql();//Imprimez l'instruction sql

Après avoir interrogé l'instruction sql exécutée, nous avons constaté que la cause de l'injection sql était le guillemet simple

Parce que :

1, via php Citations magiques pour échapper aux données saisies par l'utilisateur

La version inférieure de php est activée par défaut, ce qui échappera automatiquement à l'utilisateur -les données saisies

php.ini dans

sont activées et modifiées en

Magic_quotes_gpc=On

peut empêcher une vérification correcte

2 et échapper aux données soumises par l'utilisateur

Appelez le addslashes() fonction de php

$username= addlashes($_POST[' username']);Utilisez la fonction addslashes pour traiter

3 et utilisez les variables système de thinkphp Obtenir des données externes $this->_server

thinkphpConstantes système (4)

$this->_post('nom d'utilisateur', 'addslashes');

4, utilisez tableau comme tp dans le cadre conditions

5, écrivez directement l'instruction de requête sous la forme

$list=$model->where('user_name="'.$username.'" et dept_id="'.$password.'"')-> ; select();La connexion ne réussira pas

Exemple :

//仿sql注入
public function login(){
 $this->display();
 }
public function verify(){
 //用户名'or 1 or'登录会提示登录成功,是不正确的
 //方法1修改ini.php
 $username=$_POST['username'];
 $password=$_POST['password'];
 //方法2
 /*$username=addslashes($_POST['username']);
 $password=$_POST['password'];
 //方法3
 $this->_post('username','addslashes');
 $password=$_POST['password'];
 //方法4数组
 $cond['user_name']=$username;
 $cond['dept_id']=$password;
 $list=$model->where($cond)->find();*/
 
 $model=M('User');
 //方法5
    // $list=$model->where('user_name="'.$username.'" and dept_id="'.$password.'"')->select();
  $list=$model->where("user_name='$username' and dept_id='$password'")->select();
  echo $model->getLastsql();//打印出sql语句
  if($list){
   echo '登录成功';
   }else{
    echo '登录失败';
    }
   
 }

tpl :

<form action="URL/verify" method="post">
用户名:<input type="text" name="username">
密码:<input type="text" name="password">
<input type="submit" value="提交">
</form>

Ce qui précède concerne thinkphp empêchant les attaques par injection SQL. Il existe plusieurs méthodes. Vous pouvez essayer de l'écrire et de la mettre en pratique.

Recommandations associées :

Exemples de méthodes PHP pour empêcher l'injection SQL

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