Maison > base de données > tutoriel mysql > Comment puis-je spécifier dynamiquement les noms de colonnes dans les requêtes C# SqlCommand tout en empêchant l'injection SQL ?

Comment puis-je spécifier dynamiquement les noms de colonnes dans les requêtes C# SqlCommand tout en empêchant l'injection SQL ?

Mary-Kate Olsen
Libérer: 2024-12-18 09:18:11
original
259 Les gens l'ont consulté

How Can I Dynamically Specify Column Names in C# SqlCommand Queries While Preventing SQL Injection?

Ajustement dynamique des requêtes pour les noms de colonnes dans C# SqlCommand

Lorsque vous essayez de spécifier des noms de colonnes à l'aide de paramètres dans un objet SqlCommand, vous pouvez rencontrer un erreur indiquant que les paramètres ne peuvent pas être utilisés pour les noms de colonnes. Cette limitation pose un défi lors de la tentative d'exécution de requêtes dont les noms de colonnes peuvent varier.

Problème :

SqlCommand command = new SqlCommand("SELECT @slot FROM Users WHERE name=@name; ");
prikaz.Parameters.AddWithValue("name", name);
prikaz.Parameters.AddWithValue("slot", slot);
Copier après la connexion

Le code ci-dessus tente d'exécuter une requête avec une colonne dynamique noms utilisant des paramètres, mais il échoue avec l’erreur susmentionnée. Une solution de contournement potentielle suggérée consiste à utiliser des procédures stockées (SP) avec des déclarations de variables pour les noms de colonnes. Cependant, cette approche peut être fastidieuse.

Solution :

Au lieu de paramétrer le nom de la colonne, vous pouvez créer la requête de manière dynamique au moment de l'exécution. Pour garantir la sécurité, vous devez mettre l’entrée sur liste blanche pour éviter les attaques par injection. Voici un exemple de la façon dont vous pouvez y parvenir :

// TODO: verify that "slot" is an approved/expected value
SqlCommand command = new SqlCommand("SELECT [" + slot + "] FROM Users WHERE name=@name; ")
prikaz.Parameters.AddWithValue("name", name);
Copier après la connexion

Dans ce code, la valeur de "slot" est utilisée pour créer la chaîne de requête pendant l'exécution. Le paramètre "name" est toujours spécifié à l'aide d'un paramètre pour empêcher l'injection SQL. En construisant dynamiquement la requête, vous pouvez surmonter la limitation liée à l'utilisation de paramètres pour les noms de colonnes dans SqlCommand.

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