Maison > base de données > tutoriel mysql > Comment puis-je utiliser en toute sécurité ORDER BY dans les instructions PDO préparées ?

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

Susan Sarandon
Libérer: 2024-12-09 03:12:09
original
182 Les gens l'ont consulté

How Can I Securely Use ORDER BY in Prepared PDO Statements?

Définition des paramètres ORDER BY dans les instructions PDO préparées

Lors de la tentative d'utilisation des paramètres dans la section ORDER BY d'une requête SQL à l'aide d'un PDO préparé , il est important de savoir que PDO ne prend pas en charge la liaison directe des noms de colonnes ni les instructions de classement en tant que paramètres. Cela peut prêter à confusion lorsque l'ordre de tri souhaité n'est pas appliqué.

Pour résoudre ce problème, vous devez insérer la clause ORDER BY directement dans la requête SQL, comme illustré dans l'exemple suivant :

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

$stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER BY $order $direction");
Copier après la connexion

Considérations d'évasion

Il est crucial de s'assurer que chaque opérateur et identifiant de la clause ORDER BY est codé en dur dans votre script pour éviter les failles de sécurité. N'interpolez jamais les entrées fournies par l'utilisateur directement dans la clause ORDER BY.

Fonction d'assistance de liste blanche

Pour simplifier le processus de validation et de liste blanche, vous pouvez créer une fonction d'assistance :

function white_list($value, $allowed, $error) {
  if (in_array($value, $allowed)) {
    return $value;
  } else {
    throw new Exception($error);
  }
}
Copier après la connexion

Cette fonction vérifie la valeur par rapport à une liste d'options autorisées et génère une erreur si la valeur est invalide.

Utilisation

Avec la fonction d'assistance de liste blanche, vous pouvez créer une instruction préparée sécurisée pour la clause ORDER BY :

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

$sql = "SELECT field from table WHERE column = ? ORDER BY $order $direction";
$stmt = $db->prepare($sql);
$stmt->execute([$is_live]);
Copier après la connexion

Par en suivant ces directives, vous pouvez définir correctement les paramètres ORDER BY dans les instructions PDO préparées tout en préservant la sécurité.

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