Maison > développement back-end > tutoriel php > Comment insérer en toute sécurité des variables PHP dans des instructions MySQL pour empêcher l'injection SQL ?

Comment insérer en toute sécurité des variables PHP dans des instructions MySQL pour empêcher l'injection SQL ?

Patricia Arquette
Libérer: 2024-12-25 16:47:14
original
878 Les gens l'ont consulté

How to Safely Insert PHP Variables into MySQL Statements to Prevent SQL Injection?

Insérer des variables PHP dans les instructions MySQL

Lors de l'inclusion de variables PHP dans les instructions MySQL, il est essentiel de comprendre les règles pour garantir l'intégrité des données et éviter vulnérabilités de sécurité potentielles.

1. Utiliser des instructions préparées pour les littéraux de données

Quoi : Toutes les variables PHP représentant des littéraux de données SQL (chaînes ou nombres) doivent être incluses via des instructions préparées.

Pourquoi : Les instructions préparées nettoient et protègent les données en empêchant l'injection SQL attaques.

Comment :

  • Remplacer les variables par des espaces réservés dans la requête SQL.
  • Préparer la requête.
  • Liez les variables aux espaces réservés.
  • Exécutez le requête.

Exemple d'utilisation de mysqli :

$type = 'testing';
$reporter = "John";
$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ss", $reporter, $description);
$stmt->execute();
Copier après la connexion

Comment utiliser PDO :

$type = 'testing';
$reporter = "John";
$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$reporter, $description]);
Copier après la connexion

2. Filtrage par liste blanche pour les parties de requête

Quoi : Les variables représentant d'autres parties de requête (mots clés, identifiants) doivent être filtrées via une « liste blanche » de valeurs autorisées.

Pourquoi : Pour empêcher les utilisateurs malveillants d'injecter des parties de requête non autorisées ou mots-clés.

Comment :

  • Créez une liste de valeurs autorisées.
  • Vérifiez la variable par rapport à la liste avant de l'inclure dans la requête .
  • Formater les identifiants selon la syntaxe de la base de données (par exemple, des backticks pour MySQL).

Exemple :

$orderby = $_GET['orderby'] ?: "name";
$allowed = ["name", "price", "qty"];
$key = array_search($orderby, $allowed, true);
if ($key === false) {
    throw new InvalidArgumentException("Invalid field name");
}
$query = "SELECT * FROM `table` ORDER BY `$orderby` $direction";
Copier après la connexion

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