Maison > base de données > tutoriel mysql > Comment les requêtes paramétrées en PHP avec MySQL peuvent-elles protéger contre les attaques par injection SQL ?

Comment les requêtes paramétrées en PHP avec MySQL peuvent-elles protéger contre les attaques par injection SQL ?

Linda Hamilton
Libérer: 2024-10-28 19:03:02
original
623 Les gens l'ont consulté

How can Parameterized Queries in PHP with MySQL protect against SQL Injection Attacks?

Requêtes paramétrées pour des connexions PHP-MySQL sécurisées

L'injection SQL représente une menace de sécurité grave pour les applications Web. En manipulant les requêtes SQL, les attaquants peuvent obtenir un accès non autorisé à des données sensibles ou perturber les opérations de la base de données. Les requêtes paramétrées fournissent une contre-mesure efficace pour atténuer cette vulnérabilité.

Voici un extrait de code d'une page de connexion qui illustre comment préparer une requête paramétrée en PHP avec MySQL :

<code class="php">$dbc = @mysqli_connect($dbhost, $dbuser, $dbpass, $db); // MySQL connection

$userName = $_POST["username"];
$userPass = $_POST["password"];

$stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE username = ? AND password = ?");
mysqli_stmt_bind_param($stmt, "s", $userName);
mysqli_stmt_bind_param($stmt, "s", $userPass);
mysqli_stmt_execute($stmt);
$row = mysqli_stmt_fetch($stmt);

if (!$row) {
    echo "No existing user or wrong password.";
}</code>
Copier après la connexion

Ce code établit une connexion à la base de données MySQL à l'aide de mysqli_connect et attribue l'identifiant de connexion à $dbc. Les variables $userName et $userPass reçoivent le nom d'utilisateur et le mot de passe saisis par l'utilisateur sur la page de connexion.

La fonction mysqli_prepare initialise une instruction préparée. La requête SQL qui sera exécutée est passée en premier argument. Dans ce cas, il récupère toutes les lignes de la table des utilisateurs où le nom d'utilisateur et le mot de passe correspondent aux paramètres d'entrée.

Ensuite, mysqli_stmt_bind_param est utilisé pour lier les paramètres d'entrée fournis par l'utilisateur, $userName et $userPass, à les espaces réservés (?) dans la déclaration préparée. Le code spécifie que les deux paramètres sont de type de données s (string).

La fonction mysqli_stmt_execute exécute l'instruction préparée.

Enfin, mysqli_stmt_fetch récupère la première ligne de l'ensemble de résultats et l'attribue à la variable $row.

En utilisant des requêtes paramétrées, ce code garantit que les instructions SQL malveillantes ne peuvent pas être exécutées, protégeant ainsi contre les attaques par injection SQL.

Pour plus de sécurité, il est fortement recommandé de chiffrer ou hachez le mot de passe de l'utilisateur avant de le stocker dans la base de données.

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal