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 ?
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 :
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();
Comment utiliser PDO :
$type = 'testing'; $reporter = "John"; $sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)"; $stmt = $pdo->prepare($sql); $stmt->execute([$reporter, $description]);
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 :
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";
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!