Maison  >  Article  >  développement back-end  >  Comment empêcher l'injection SQL en PHP

Comment empêcher l'injection SQL en PHP

不言
不言original
2019-02-21 09:50:265948parcourir

Cet article vous présentera l'injection SQL en PHP et comment empêcher l'injection SQL à l'aide des pilotes PHP-MySQLi et PHP-PDO. Examinons le contenu spécifique ci-dessous.

Comment empêcher linjection SQL en PHP

Exemple d'injection SQL simple

Par exemple, A a un site Web bancaire. Une interface Web a été mise à disposition des clients de la banque pour consulter leurs numéros de compte et leurs soldes. Le site Web de votre banque utilise des URL telles que http://example.com/get_account_details.Comment empêcher linjection SQL en PHP?account_id=102 pour extraire les détails de la base de données.

Par exemple, le code pour get_account_details.Comment empêcher linjection SQL en PHP est le suivant.

$accountId = $_GET['account_id'];
$query = "SELECT accountNumber, balance FROM accounts WHERE accountId = $accountId";

Le accountId client est transmis en tant que account_id via la chaîne de requête. Identique à l'URL ci-dessus, si l'identifiant de compte de l'utilisateur est 102 et qu'il est transmis dans la chaîne de requête. Le script Php créera la requête ci-dessous.

$query = "SELECT accountNumber, balance FROM accounts WHERE accountId = 102";

accountId 102 obtient le numéro de compte et les détails du solde et les fournit au client.

Supposons un autre scénario dans lequel le client intelligent a transmis account_id, tout comme 0 OU 1=1 chaîne de requête. Que se passe-t-il maintenant ? Le script PHP créera la requête ci-dessous et l'exécutera sur la base de données.

$query = "SELECT accountNumber, balance FROM accounts WHERE accountId = 0 OR 1=1";

Affichez la requête créée à partir des résultats renvoyés par le script et la base de données. Vous pouvez voir que cette requête renvoie tous les comptes et soldes disponibles.

C'est ce qu'on appelle l'injection SQL. C'est un moyen simple, mais il existe de nombreuses façons d'effectuer une injection SQL. Voyons comment utiliser le pilote PHP MySQLi et le pilote PHP PDO pour empêcher l'injection SQL.

Utilisation du pilote PHP-MySQLi

Vous pouvez utiliser les instructions préparées par le pilote PHP-MySQLi pour éviter ces types d'injections SQL.

Le code PHP pour empêcher l'injection SQL est le suivant :

$accountId = $_GET['account_id'];
 
if ($stmt = $mysqli->prepare('SELECT accountNumber, balance FROM accounts WHERE accountId = ?')) {
  
    $stmt->bind_param("s", $accountId);
 
    $stmt->execute();
 
 $result = $stmt->get_result();
 
 while ($row = $result->fetch_assoc()) {
 // do something here
 }
 
    $stmt->close(); 
}

Utilisez le pilote PHP-PDO

Vous pouvez utiliser PHP- Le programme du pilote PDO prépare des instructions pour éviter ces types d'injections SQL.

Le code PHP pour résoudre le problème d'injection SQL ci-dessus est le suivant :

$accountId = $_GET['account_id'];
 
if ($stmt = $pdo->prepare('SELECT accountNumber, balance FROM accounts WHERE accountId = :accountId')) {
  
    $stmt->execute(array('name' => $name));
 
 foreach ($stmt as $row) {
 // do something here
 }
 
    $stmt->close(); 
}

Cet article est terminé ici. Pour plus d'autres contenus passionnants, vous pouvez prêter attention aux autres articles sur Comment empêcher linjection SQL en PHP. Site Web chinois Tutoriels de colonnes connexes ! ! !

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