Par Malik • 26 July 2024
Les attaques par injection SQL sont l'une des menaces les plus courantes et dangereuses pour les applications web. Elles surviennent lorsque des requêtes SQL malveillantes sont insérées dans les champs de saisie de l'utilisateur, permettant ainsi aux attaquants d'accéder à des données sensibles ou de manipuler la base de données.
Une injection SQL se produit lorsque des données fournies par l'utilisateur ne sont pas correctement validées ou échappées avant d'être utilisées dans une requête SQL. Par exemple, considérez la requête suivante :
SELECT * FROM users WHERE username = 'admin' AND password = 'password';
Si un utilisateur malveillant entre admin' OR '1'='1
comme nom d'utilisateur, la requête résultante devient :
SELECT * FROM users WHERE username = 'admin' OR '1'='1' AND password = 'password';
Cette requête renverra tous les utilisateurs de la base de données car '1'='1'
est toujours vrai.
Voici un exemple de code PHP vulnérable à une injection SQL :
<?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 "Connexion réussie!";
} else {
echo "Nom d'utilisateur ou mot de passe incorrect.";
}
?>
Dans cet exemple, les variables $username
et $password
sont directement insérées dans la requête SQL sans aucune validation, ce qui rend le code vulnérable aux injections SQL.
Les injections SQL peuvent avoir des conséquences graves, notamment :
La meilleure façon de se protéger contre les injections SQL est d'utiliser des requêtes préparées ou des instructions paramétrées. Voici comment réécrire l'exemple précédent en utilisant des requêtes préparées :
<?php
$username = $_POST['username'];
$password = $_POST['password'];
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
echo "Connexion réussie!";
} else {
echo "Nom d'utilisateur ou mot de passe incorrect.";
}
?>
En utilisant des requêtes préparées, les données fournies par l'utilisateur sont traitées séparément de la requête SQL, ce qui empêche les injections SQL.
En plus d'utiliser des requêtes préparées, voici quelques autres bonnes pratiques pour sécuriser vos applications contre les injections SQL :
Les attaques par injection SQL peuvent avoir des conséquences dévastatrices pour les applications web et leurs utilisateurs. En comprenant comment elles fonctionnent et en utilisant des pratiques de codage sécurisées, telles que les requêtes préparées et la validation des entrées, vous pouvez protéger votre application et ses données contre ces menaces.
Pour plus d'informations sur les pratiques de sécurité en développement web, consultez les ressources de l'OWASP (Open Web Application Security Project).
.
Concevez un site web moderne qui attire et engage vos visiteurs dès la première vue.
Obtenez votre devis personnalisé