Maison >base de données >tutoriel mysql >Comment les requêtes paramétrées protègent-elles contre l'injection SQL ?

Comment les requêtes paramétrées protègent-elles contre l'injection SQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-29 10:54:02577parcourir

How Do Parameterized Queries Protect Against SQL Injection?

Utilisation de requêtes paramétrées pour une interaction sécurisée avec les bases de données

L'injection SQL reste une menace de sécurité importante, permettant aux attaquants d'exécuter des requêtes malveillantes à l'aide des entrées soumises par l'utilisateur. . Pour protéger votre site Web, les requêtes paramétrées offrent une solution robuste. Cependant, leur intégration nécessite une gestion appropriée des connexions à la base de données.

Considérez cet exemple de code de page de connexion :

<code class="php">$userName = $_POST["username"];
$userPass = $_POST["password"];

$query = "SELECT * FROM users WHERE username = '$userName' AND password = '$userPass'";

$result = mysqli_query($dbc, $query); //$dbc is for MySQL connection: $dbc = @mysqli_connect($dbhost, $dbuser, $dbpass, $db)

$row = mysqli_fetch_array($result);

if(!$row){
    echo "No existing user or wrong password.";
}</code>

Mise en œuvre de requêtes paramétrées :

Pour éviter Injection SQL, remplacez ce code par :

<code class="php">$stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE username = ? AND password = ?");

mysqli_stmt_bind_param($stmt, "ss", $userName, $userPass);

mysqli_stmt_execute($stmt);

$row = mysqli_stmt_fetch($stmt);</code>
  • mysqli_prepare(): Prépare une instruction de requête paramétrée.
  • mysqli_stmt_bind_param(): Lie les valeurs d'entrée aux espaces réservés (?).
  • mysqli_stmt_execute(): Exécute la requête préparée.
  • mysqli_stmt_fetch(): Récupère le ligne de résultat.

Gestion de la connexion :

Dans le code d'origine, la connexion à la base de données est établie à l'aide de mysqli_connect(). Cela doit être fait avant d'exécuter des requêtes. Assurez-vous de disposer d'un $dbc valide avant de continuer.

Meilleures pratiques de sécurité :

  • Hashez ou chiffrez les mots de passe avant de les stocker dans la base de données.
  • Validez les entrées de l'utilisateur pour éviter les caractères malveillants.
  • Utilisez systématiquement les instructions préparées pour toutes les interactions de base de données impliquant des données fournies par l'utilisateur.

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