Maison  >  Article  >  base de données  >  Comment puis-je utiliser en toute sécurité les instructions préparées par PDO avec des identifiants et des mots clés dynamiques ?

Comment puis-je utiliser en toute sécurité les instructions préparées par PDO avec des identifiants et des mots clés dynamiques ?

DDD
DDDoriginal
2024-11-24 05:15:12825parcourir

How Can I Safely Use PDO Prepared Statements with Dynamic Identifiers and Keywords?

Utilisation d'instructions préparées PDO avec des identifiants et des mots-clés

Lors de l'utilisation d'instructions préparées PDO, il est important de noter que les espaces réservés ne peuvent représenter que des littéraux de données. Cela signifie que tenter de lier un identifiant (nom de table ou de champ) ou un mot-clé de syntaxe à l'aide de bindParam() ou bindValue() entraînera un comportement inattendu.

Identifiants de liaison

Lorsque vous travaillez avec des Pour les requêtes qui impliquent la spécification dynamique d'un nom de table ou de champ, il est crucial de gérer la liaison d'identifiant avec soin. PDO ne fournit aucune prise en charge directe des identifiants de liaison. Par conséquent, les développeurs doivent formater et valider manuellement les identifiants pour garantir la sécurité et empêcher les attaques par injection.

Pour formater les identifiants en toute sécurité, suivez ces règles :

  • Entourez les identifiants entre guillemets :
  • Évitez les backticks dans les identifiants en les doublant : ``

Une fois formaté, vérifiez l'identifiant par rapport à un liste blanche codée en dur des valeurs autorisées pour éviter toute utilisation abusive.

Mots clés de syntaxe de liaison

De même, les mots clés de syntaxe de liaison, tels que « ORDER BY » ou « DESC », ne sont pas pris en charge par PDO. Les développeurs doivent valider manuellement et ajouter les mots-clés à la liste blanche pour empêcher toute entrée malveillante de modifier le comportement de la requête.

Exemple de code

Le code suivant illustre comment gérer les identifiants dynamiques et les mots-clés à l'aide du formatage de chaîne et de la liste blanche :

$field = "`" . str_replace("`", "``", $_GET['field']) . "`";
$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC'; 
$sql = "SELECT $field FROM t ORDER BY field $dir";

Dans cet exemple, le nom du champ dynamique est entouré de guillemets et échappé si nécessaire. La direction de tri est validée par rapport à une liste blanche pour empêcher toute entrée malveillante de modifier la requête.

En suivant attentivement ces directives, les développeurs peuvent utiliser des instructions préparées par PDO avec des identifiants et des mots-clés dynamiques tout en maintenant la sécurité et en empêchant les attaques par injection.

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