Maison > Article > développement back-end > Utilisez le framework TP pour imiter l'injection d'attaque SQL
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 où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!