Contrôle d'injection de l'assemblage C #
-
03-07-2019 - |
Question
Je crée un assemblage en C # pour MS SQL 2005. Cet assemblage crée une procédure stockée et exécute une requête dynamique en fonction des paramètres transmis à la procédure stockée.
Existe-t-il une fonction simple en C # pour empêcher l’injection SQL?
Par exemple
string myQuery = "SELECT * FROM dbo.MyTable WHERE lastName = '" + injectionCheck(arg1) + "'";
Cette question a reçu une réponse pour la requête standard ... mais dans les situations où il est impossible de créer une requête véritablement dynamique, que puis-je utiliser en C # pour la vérification d'injection?
Par exemple, ceux-ci ne fonctionneront probablement pas:
utilisant @dbName;
SELECT * FROM @table
CLÉ SYMÉTRIQUE OUVERTE @Nom clé
etc
La solution
Utiliser les paramètres liés:
SqlCommand cmd = new SqlCommand(myQuery, conn);
cmd.Parameters.Add("@lastname", SqlDbType.NVarChar, 10, lastName);
Autres conseils
Utiliser les paramètres ....
(Cela a déjà été publié souvent)
string myQuery = "SELECT * FROM myTable WHERE lastname = @p_name";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = myQuery;
cmd.Parameters.Add ("@p_name", SqlDbType.Varchar).Value = "melp";