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

Comment empêcher l'injection SQL en PHP

爱喝马黛茶的安东尼
Libérer: 2023-02-25 10:20:01
original
3238 Les gens l'ont consulté

Comment empêcher l'injection 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.php?account_id=102 pour extraire les détails de la base de données.

Par exemple, le code pour get_account_details.php ressemble à ceci :

$accountId = $_GET['account_id'];
$query = "SELECT accountNumber, balance FROM accounts WHERE accountId = $accountId";
Copier après la connexion

Le customer accountId 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.

Recommandations associées : "tutoriel php"

Supposons un autre scénario dans lequel le client intelligent a transmis le account_id, tout comme la chaîne de requête 0 OU 1=1. 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 l'instruction de préparation du pilote PHP-PDO pour évitez 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

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:
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