Débuter avec PHP : injection SQL

王林
Libérer: 2023-05-20 11:32:02
original
2220 Les gens l'ont consulté

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>
Copier après la connexion

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);
?>
Copier après la connexion

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
Copier après la connexion

À 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'
Copier après la connexion

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 :

  1. Utilisez des requêtes paramétrées telles que mysqli ou PDO, et ne fusionnez pas directement les données saisies par l'utilisateur dans des instructions SQL.
  2. Effectuez une vérification et un filtrage stricts sur toutes les données d'entrée, comme la suppression des espaces, le filtrage des caractères spéciaux, etc.
  3. Définissez la politique de sécurité du programme, comme restreindre les données saisies par les utilisateurs pour réduire autant que possible le risque d'injection SQL.
  4. Configurez la sécurité de la base de données, par exemple en interdisant aux administrateurs de se connecter en tant qu'utilisateur root, en restreignant l'accès au réseau, etc.

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!

É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