2009-03-02 9 views
1

Je crée un assembly en C# pour MS SQL 2005. Cet assembly crée une procédure stockée et exécute une requête dynamique basée sur les paramètres transmis dans la procédure stockée.C# Assembly Injection Check

Y a-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 été répondu à la requête standard ... mais dans des situations où il n'y a pas moyen de contourner la construction d'une requête dynamique truely ce que je peux utiliser en C# pour le contrôle de l'injection?

Par exemple, ces travaux ne sera probablement pas:

utilisant @DbName;

SELECT * FROM @table

OUVERT KEY @keyName SYMMETRIC

etc

Répondre

7

Utiliser les paramètres liés:

SqlCommand cmd = new SqlCommand(myQuery, conn); 
cmd.Parameters.Add("@lastname", SqlDbType.NVarChar, 10, lastName); 
+0

Cela fonctionnerait sur les requêtes standard mais si je devais l'utiliser pour un nom de table ou une autre situation dans laquelle cette méthode ne fonctionnerait pas? –

3

paramètres Utilisez ....

(Ce a été posté souvent déjà)

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";