Comment empêcher l'injection SQL en PHP

不言
Libérer: 2023-04-05 11:00:01
original
6037 Les gens l'ont consulté

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";
Copier après la connexion

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";
Copier après la connexion

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";
Copier après la connexion

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(); 
}
Copier après la connexion

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(); 
}
Copier après la connexion

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!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal