Maison  >  Article  >  base de données  >  Comment les requêtes paramétrées en PHP peuvent-elles protéger contre l'injection SQL dans les bases de données MySQL ?

Comment les requêtes paramétrées en PHP peuvent-elles protéger contre l'injection SQL dans les bases de données MySQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-02 07:07:30346parcourir

How can Parameterized Queries in PHP Protect against SQL Injection in MySQL Databases?

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

L'injection SQL reste une menace de sécurité persistante qui peut compromettre les données sensibles dans les applications de base de données. Les requêtes paramétrées sont une technique cruciale pour atténuer ce risque. Cependant, leur mise en œuvre correcte nécessite de comprendre non seulement la requête elle-même, mais également le processus de connexion à la base de données.

Considérez l'extrait de code suivant provenant d'une page de connexion PHP :

<code class="php">$query = "SELECT * FROM users WHERE username = '$userName' AND password = '$userPass'";
$result = mysqli_query($dbc, $query);
$row = mysqli_fetch_array($result);</code>

Ce code est vulnérable à Injection SQL car les entrées fournies par l'utilisateur $userName et $userPass sont directement incluses dans la chaîne de requête.

Pour implémenter des requêtes paramétrées, remplacez ce code par le suivant :

<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>

Dans ce code amélioré :

  • mysqli_prepare prépare un objet d'instruction PDO qui peut être exécuté plusieurs fois.
  • mysqli_stmt_bind_param lie les entrées fournies par l'utilisateur à des espaces réservés paramétrés (?) dans la requête SQL, empêchant Injection SQL.
  • mysqli_stmt_execute exécute l'instruction préparée.
  • mysqli_stmt_fetch récupère la ligne de résultat.

N'oubliez pas de crypter ou de hacher les mots de passe des utilisateurs pour plus de sécurité. Les requêtes paramétrées ainsi que ces mesures supplémentaires garantissent des interactions sécurisées avec la base de données MySQL dans vos applications PHP.

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