Maison >développement back-end >tutoriel php >Débuter avec PHP : injection SQL

Débuter avec PHP : injection SQL

王林
王林original
2023-05-20 11:30:102249parcourir

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 :

  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!

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