Comment thinkphp empêche-t-il l'injection SQL ?
Pour les applications WEB, les attaques par injection SQL sont sans aucun doute le principal problème de sécurité à prévenir. La couche inférieure du système a effectué de nombreux traitements et mécanismes de prévention correspondants pour la sécurité des données, tels que :
$User = M("User"); // 实例化User对象 $User->find($_GET["id"]);
Même si l'utilisateur saisit des paramètres d'identification malveillants, le système forcera la conversion en un entier pour éviter une injection malveillante. En effet, le système effectuera une détection obligatoire du type de données sur les données et effectuera une conversion du format de données sur la source de données. De plus, pour les données de type chaîne, ThinkPHP effectuera le traitement escape_string (real_escape_string, mysql_escape_string) et prend également en charge la liaison de paramètres.
Un risque de sécurité courant est que vos conditions de requête utilisent des paramètres de chaîne, et que certaines de ces variables reposent alors sur les entrées de l'utilisateur du client.
Pour prévenir efficacement les problèmes d'injection SQL, nous recommandons :
● Essayez d'utiliser des tableaux pour les conditions de requête, ce qui est un moyen plus sûr
● Doit être utilisé si nécessaire pour ; conditions de requête de chaîne, utilisez le mécanisme de prétraitement ;
● Utilisez les mécanismes de vérification et d'achèvement automatiques pour le filtrage personnalisé des applications
● Si l'environnement le permet, essayez d'utiliser PDO et utilisez la liaison de paramètres.
Prétraitement des conditions de requête
Lorsque la méthode Where utilise des conditions de chaîne, elle prend en charge le prétraitement (filtrage de sécurité) et prend en charge deux manières de transmettre les paramètres de prétraitement. Par exemple :
$Model->where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))->select(); // 或者 $Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();
Les méthodes de requête et d'exécution du modèle prennent également en charge le mécanisme de prétraitement :
$model->query('select * from user where id=%d and status=%d',$id,$status); //或者 $model->query('select * from user where id=%d and status=%d',array($id,$status));
La méthode d'exécution est utilisée de la même manière que la méthode de requête.
Cet article provient de la colonne d'articles techniques du framework ThinkPHP : http://www.php.cn/phpkj/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!