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
Linda Hamiltonoriginal
2024-12-04 18:32:12476parcourir

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();

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

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]);

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