Maison >développement back-end >Problème PHP >Principe d'injection PHP anti-sql
Injection SQL : en insérant des commandes SQL dans les soumissions de formulaires Web ou en saisissant des chaînes de requête pour les noms de domaine ou les demandes de pages, cela trompe finalement le serveur et l'oblige à exécuter des commandes SQL malveillantes.
Les instructions préparées sont très utiles pour l'injection SQL, car différents protocoles sont utilisés après l'envoi des valeurs des paramètres, garantissant la légitimité des données. Le prétraitement est considéré comme un modèle compilé du SQL que vous souhaitez exécuter, qui peut être personnalisé à l'aide de paramètres variables. (Apprentissage recommandé : Tutoriel vidéo PHP)
Méthode de défense 1
mysql_real_escape_string – échappe la chaîne utilisée dans les caractères spéciaux de l'instruction SQL , en tenant compte du jeu de caractères actuel de la connexion !
$sql = "select count(*) as ctr from users where username ='".mysql_real_escape_string($username)."' and password='". mysql_real_escape_string($pw)."' limit 1";
Méthode 2 :
Ouvrez magic_quotes_gpc pour empêcher l'injection SQL. Il y a un paramètre dans php.ini : magic_quotes_gpc =
Off. Ceci est désactivé par défaut. S'il est activé, il convertira automatiquement les requêtes soumises par l'utilisateur en SQL, comme la conversion de ' en ', etc., pour empêcher les injections SQL de faire toute la différence.
Si magic_quotes_gpc=Off, utilisez la fonction addlashes().
Méthode 3 :
Fonction personnalisée
function check_param($value=null) { #select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile $str = 'select|insert|and|or|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile'; if(!$value) { exit('没有参数!'); }elseif(eregi($str, $value)) { exit('参数非法!'); } return true; } function str_check( $value ) { if(!get_magic_quotes_gpc()) { // 进行过滤 $value = addslashes($value); } $value = str_replace("_", "\_", $value); $value = str_replace("%", "\%", $value); return $value; } function post_check($value) { if(!get_magic_quotes_gpc()) { // 进行过滤 $value = addslashes($value); } $value = str_replace("_", "\_", $value); $value = str_replace("%", "\%", $value); $value = nl2br($value); $value = htmlspecialchars($value); return $value; }
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!