Maison >base de données >tutoriel mysql >Comment puis-je définir en toute sécurité les noms de tables dans les requêtes SQL dynamiques à l'aide de paramètres ?

Comment puis-je définir en toute sécurité les noms de tables dans les requêtes SQL dynamiques à l'aide de paramètres ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-11 17:31:42825parcourir

How Can I Securely Set Table Names in Dynamic SQL Queries Using Parameters?

Requête SQL dynamique : utiliser des paramètres pour définir les noms de tables

Lors du traitement de requêtes SQL dynamiques, il est généralement nécessaire de définir dynamiquement le nom de la table en fonction des paramètres d'entrée. Bien que la définition de paramètres tels que les ID soit simple, la définition des noms de table peut présenter des défis.

Tentative échouée :

L'approche initiale démontrée dans le code fourni consiste à définir le nom de la table directement dans la chaîne de requête SQL. Cependant, cette approche est vulnérable aux attaques par injection SQL.

Solution utilisant la fonction OBJECT_ID :

Pour garantir la sécurité et éviter les injections SQL malveillantes, il est recommandé d'utiliser la fonction OBJECT_ID pour analyser dynamiquement l'ID d'objet du nom de la table. Ce faisant, les noms de table mal formés ou injectés ne seront pas résolus, évitant ainsi les vulnérabilités de sécurité.

Voici le code mis à jour :

<code class="language-sql">...
SET @TableName = '<[db].><[schema].>tblEmployees'
SET @TableID = OBJECT_ID(@TableName) --如果格式错误/注入,则不会解析。
...
SET @SQLQuery = 'SELECT * FROM ' + QUOTENAME(OBJECT_NAME(@TableID)) + ' WHERE EmployeeID = @EmpID'</code>

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