Maison >développement back-end >tutoriel php >Qu'est-ce que l'injection SQL ? et comment prévenir

Qu'est-ce que l'injection SQL ? et comment prévenir

Barbara Streisand
Barbara Streisandoriginal
2024-12-31 17:28:38310parcourir

SQL Injection คืออะไร? และวิธีการป้องกัน

Injection SQL

Il s'agit d'une attaque de sécurité courante dans les systèmes de bases de données qui utilisent SQL (Structured Query Language) comme langage de gestion de bases de données. Cette attaque se produit lorsqu'un attaquant injecte du code SQL malveillant dans des champs de saisie utilisateur, tels que des champs de formulaire ou des URL, pour accéder ou modifier de manière inappropriée des données dans une base de données.

SQL Injection se classe n°3 dans le Top 10 OWASP 2021, une liste des vulnérabilités de sécurité les plus courantes et les plus importantes pour les applications Web par l'Open Web Application Security Project (OWASP). Elle est mise à jour à chaque fois. sur plusieurs années pour refléter l'évolution des cybermenaces

SQL Injection คืออะไร? และวิธีการป้องกัน

Les attaques par injection SQL sont classées comme la menace n°3, démontrant l'importance et la prévalence de ce problème en termes de sécurité des applications Web. Bien gérer les attaques par injection est essentiel pour sécuriser les systèmes d’information et prévenir les accès indésirables

Comment attaquer l'injection SQL

Les attaques par injection SQL peuvent être effectuées de différentes manières, mais il y en a deux les plus courantes :

  • Insérer des valeurs directement dans le champ de saisie
  • Modification de l'URL pour ajouter une instruction SQL

Exemple d'attaque par injection SQL

Supposons qu'il existe une application Web qui permet aux utilisateurs de se connecter, avec du code PHP

<?php
$username = $_POST['username'];
$password = $_POST['password'];

$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = mysqli_query($conn, $query);

if (mysqli_num_rows($result) > 0) {
    echo "Login successful!";
} else {
    echo "Invalid username or password.";
}
?>

Ce code est vulnérable car l'insertion de valeurs utilisateur directement dans des instructions SQL peut provoquer une injection SQL

Attaques par injection SQL

Les pirates peuvent insérer des valeurs malveillantes dans des champs comme celui-ci

  • Champ Nom d'utilisateur ' OR '1'='1
  • champ mot de passe' OR '1'='1

Cela fait ressembler l'instruction SQL à ceci

SELECT * FROM users WHERE username='' OR '1'='1' AND password='' OR '1'='1'

Parce que '1'='1' est une condition qui est toujours vraie. Cette commande renvoie des informations pour chaque utilisateur de la base de données. Cela permet aux pirates de se connecter sans utiliser de vrai mot de passe

Comment empêcher l'injection SQL

Il existe plusieurs façons d'empêcher l'injection SQL, telles que

  • Utilisation de déclarations préparées
  • Utilisation de procédures stockées
  • Filtrer et valider les données d'entrée. ## Exemple d'utilisation d'instructions préparées en PHP
<?php
$stmt = $conn->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->bind_param("ss", $username, $password);

$username = $_POST['username'];
$password = $_POST['password'];

$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    echo "Login successful!";
} else {
    echo "Invalid username or password.";
}
?>

Dans cet exemple, l'instruction SQL est préparée à l'avance et les valeurs $username et $password sont insérées ultérieurement dans l'instruction. Cela rend impossible l'injection de code SQL malveillant

résumer

SQL Injection est une menace sérieuse. Mais cela peut être évité en écrivant du code sécurisé, par exemple en utilisant des instructions préparées et en validant les entrées. Une bonne protection ne permet pas seulement de protéger vos données. Mais cela permet également de maintenir la fiabilité du système.

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