Maison  >  Article  >  développement back-end  >  Principe d'injection PHP anti-sql

Principe d'injection PHP anti-sql

(*-*)浩
(*-*)浩original
2019-10-26 13:18:162463parcourir

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.

Principe d'injection PHP anti-sql

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!

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