Démarrer avec PHP : injection SQL
Avec le développement rapide d'Internet, les applications Web deviennent de plus en plus populaires et leur sécurité est devenue un sujet de grande préoccupation. L'injection SQL est une méthode d'attaque courante dans les applications Web. Elle peut entraîner de graves problèmes de sécurité et affecter le fonctionnement normal des applications Web. Lors de l'apprentissage et de l'utilisation de PHP, il est très important de comprendre et de maîtriser les connaissances pertinentes en matière d'injection SQL.
L'injection SQL fait référence à une méthode d'attaque dans laquelle un attaquant saisit des instructions SQL malveillantes dans une application Web pour contourner l'authentification, accéder aux données de la base de données et effectuer des opérations non autorisées. Les attaques par injection SQL tirent parti de la confiance de l'application Web dans les données saisies par l'utilisateur. L'attaquant falsifie les données saisies par l'utilisateur et permet à l'application Web de les traiter comme des données fiables.
Ce qui suit prend comme exemple un simple formulaire de connexion pour présenter les principes et les mesures préventives de l'injection SQL.
En PHP, les dbms sont généralement connectés via deux extensions : mysqli et PDO Cet article prendra mysqli comme exemple.
Tout d'abord, nous créons un formulaire de connexion, et l'utilisateur saisit le nom d'utilisateur et le mot de passe :
<!DOCTYPE html> <html> <head> <title>Login form</title> </head> <body> <form method="post" action="login.php"> <label for="username">Username:</label> <input type="text" name="username" id="username" required> <br> <label for="password">Password:</label> <input type="password" name="password" id="password" required> <br> <input type="submit" value="Login"> </form> </body> </html>
Ensuite, nous comparons le nom d'utilisateur et le mot de passe saisis par l'utilisateur avec les données de la base de données. Si la correspondance est réussie, la connexion est. réussi, sinon la connexion est réussie et échoue.
<?php $db_servername = "localhost"; $db_username = "username"; $db_password = "password"; $db_name = "database_name"; // create connection $conn = mysqli_connect($db_servername, $db_username, $db_password, $db_name); // check connection if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } // get user input $user = $_POST["username"]; $pass = $_POST["password"]; // process user input $sql = "SELECT * FROM users WHERE username='$user' AND password='$pass'"; $result = mysqli_query($conn, $sql); // check result if (mysqli_num_rows($result) > 0) { echo "Login success."; } else { echo "Login failed."; } // close connection mysqli_close($conn); ?>
Le code ci-dessus a l'air génial, mais il a un sérieux problème : il est vulnérable aux attaques par injection SQL.
L'attaquant peut saisir le contenu suivant dans la zone de saisie du nom d'utilisateur et du mot de passe :
' OR '1'='1
À ce stade, l'instruction de requête générée est :
SELECT * FROM users WHERE username='' OR '1'='1' AND password='' OR '1'='1'
Cette instruction SQL renverra les enregistrements de tous les utilisateurs, donc quel que soit le nom d'utilisateur saisi. et mot de passe Qu'il soit correct ou non, vous pourrez vous connecter avec succès. C’est ainsi que fonctionnent les attaques par injection SQL.
Pour éviter les attaques par injection SQL, vous devez être prudent lorsque vous manipulez les données saisies par l'utilisateur. Voici quelques précautions :
En bref, lors de l'écriture d'applications Web, que ce soit en utilisant PHP ou d'autres langages, vous devez prendre au sérieux la question des attaques par injection SQL. Ce n'est qu'en renforçant la compréhension et la prévention des attaques par injection SQL que nous pourrons mieux protéger le fonctionnement sécurisé des applications Web.
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!