Les attaques d'injection SQL sont courantes et menaçaient les vulnérabilités de sécurité extrêmement menaçantes dans le développement Web. L'attaquant exploite cette vulnérabilité pour injecter du code malveillant dans la base de données, détruisant ainsi l'intégrité de la base de données ou la fuite d'informations sensibles. Dans le traitement de la forme PHP, la clé pour prévenir efficacement les attaques d'injection SQL est de filtrer et de coder strictement les données saisies par les utilisateurs. Cet article expliquera en détail comment empêcher les attaques d'injection SQL et fournir des solutions en combinaison avec des exemples de code.
Les instructions de prétraitement sont une technologie qui pré-send les instructions SQL au serveur de base de données pour l'analyse et la compilation, ce qui peut effectivement empêcher l'injection SQL. Il sépare les données d'entrée de l'utilisateur des instructions SQL à travers des requêtes paramétrées, évitant ainsi l'injection de données malveillantes. Dans PHP, PDO fournit une fonctionnalité de déclaration de prétraitement pratique, et ce qui suit est l'exemple de code pour l'implémentation:
// Connectez-vous à la base de données
$dsn = 'mysql:host=localhost;dbname=test';
$username = 'root';
$password = 'password';
try {
$pdo = new PDO($dsn, $username, $password);
// Définissez le mode d'erreur sur exception
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'La connexion de la base de données a échoué:' . $e->getMessage();
}
// PréparerSQLDéclaration
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
// Lier les paramètres
$stmt->bindParam(':username', $username);
// Exécuter une requête
$stmt->execute();
// Obtenir des résultats
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Résultat de sortie
foreach ($result as $row) {
echo $row['username'];
}
Dans ce code, tout d'abord, l'instruction SQL Query est préparée via la méthode Pread (), et le nom d'utilisateur: nom d'utilisateur est utilisé à la place du nom d'utilisateur saisi par l'utilisateur. Le nom d'utilisateur réel est lié à l'espace réservé via la méthode BindParam (), et la requête est finalement exécutée, en évitant d'insérer des données utilisateur directement dans l'instruction SQL.
PHP fournit une variété de fonctions de filtrage pour nettoyer et filtrer les données d'entrée utilisateur, en particulier pour supprimer les caractères spéciaux et les mots clés SQL qui peuvent déclencher des attaques d'injection SQL. MySQLI_REAL_ESCACE_STRING () est une fonction de filtrage couramment utilisée qui peut nous aider à échapper aux chaînes entrées par les utilisateurs et à éviter l'impact des caractères spéciaux sur les instructions SQL. Voici un exemple de code en utilisant cette fonction:
// Connectez-vous à la base de données
$servername = 'localhost';
$username = 'root';
$password = 'password';
$dbname = 'test';
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Vérifiez si la connexion réussit
if (!$conn) {
die('La connexion de la base de données a échoué: ' . mysqli_connect_error());
}
// Filtre les données d'entrée de l'utilisateur
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = mysqli_real_escape_string($conn, $_POST['password']);
// Exécuter une requête
$sql = "SELECT * FROM users WHERE username = '{$username}' AND password = '{$password}'";
$result = mysqli_query($conn, $sql);
// Résultats de traitement
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
echo 'Le nom d'utilisateur est: ' . $row['username'];
}
} else {
echo 'Nom d'utilisateur ou mot de passe incorrect';
}
// Fermer la connexion
mysqli_close($conn);
Grâce à la fonction mysqli_real_escape_string (), nous filtrons le nom d'utilisateur et le mot de passe entré par l'utilisateur, évitant les caractères spéciaux ou les mots clés SQL exécutés, empêchant ainsi les attaques d'injection SQL.
Il existe de nombreuses façons d'empêcher les attaques d'injection SQL sous des formes PHP, et les stratégies les plus courantes et les plus efficaces comprennent l'utilisation d'instructions de prétraitement et de fonctions de filtrage. Quoi qu'il en soit, il est important de s'assurer que toutes les données saisies par les utilisateurs sont strictement filtrées et codées pour assurer la sécurité du site Web. Les développeurs doivent également effectuer des avis de sécurité réguliers et des analyses de vulnérabilité pour corriger rapidement les risques de sécurité possibles et protéger les données des utilisateurs et les informations sur le site Web.