Maison > développement back-end > tutoriel php > Comment puis-je utiliser en toute sécurité ORDER BY avec des paramètres dans les instructions préparées PDO ?

Comment puis-je utiliser en toute sécurité ORDER BY avec des paramètres dans les instructions préparées PDO ?

Linda Hamilton
Libérer: 2024-12-04 18:32:12
original
493 Les gens l'ont consulté

How Can I Safely Use ORDER BY with Parameters in PDO Prepared Statements?

Utilisation de paramètres dans la clause ORDER BY avec des instructions préparées PDO

Dans PDO, il n'est pas possible d'utiliser directement les paramètres de la clause ORDER BY. Cela peut conduire à des vulnérabilités potentielles d'injection SQL.

Lorsque vous rencontrez une telle situation, il est nécessaire d'insérer la clause ORDER BY directement dans la chaîne SQL. Cependant, des précautions doivent être prises pour éviter les attaques par injection SQL.

Exemple :

$order = 'columnName';
$direction = 'ASC';

$query = "SELECT * FROM table WHERE column = :my_param ORDER BY $order $direction";

$stmt = $db->prepare($query);
$stmt->bindParam(':my_param', $is_live, PDO::PARAM_STR);
$stmt->execute();
Copier après la connexion

Fonction d'aide à la liste blanche :

Pour atténuer les risques potentiels, il est recommandé d'utiliser une fonction d'assistance de liste blanche pour valider que les valeurs fournies pour la clause ORDER BY sont légitimes. Voici un exemple :

function white_list($value, $allowed_values, $error_message) {
  if (!in_array($value, $allowed_values)) {
    throw new Exception($error_message);
  }
  return $value;
}
Copier après la connexion

Utilisation de la fonction d'assistance :

$order = white_list($order, ["name", "price", "qty"], "Invalid field name");
$direction = white_list($direction, ["ASC", "DESC"], "Invalid ORDER BY direction");

$query = "SELECT field FROM table WHERE column = ? ORDER BY $order $direction";

$stmt = $db->prepare($query);
$stmt->execute([$is_live]);
Copier après la connexion

Cette approche garantit que seules les valeurs autorisées sont incluses dans la clause ORDER BY, protégeant ainsi votre application contre les entrées malveillantes.

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