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 ?
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.
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 :
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.
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.
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!