ExecuteCommand de LINQ assure-t-il une protection contre les attaques par injection SQL?

StackOverflow https://stackoverflow.com/questions/157924

  •  03-07-2019
  •  | 
  •  

Question

J'ai parfois besoin d'utiliser la méthode ExecuteCommand de LINQ pour exécuter une insertion.

Quelque chose comme (simplifié pour les besoins de cette question):

object[] oParams = { Guid.NewGuid(), rec.WebMethodID };

TransLogDataContext.ExecuteCommand (
"INSERT INTO dbo.Transaction_Log (ID, WebMethodID) VALUES ({0}, {1})",
oParams);

La question est de savoir s'il s'agit d'une épreuve d'injection SQL de la même manière que les requêtes paramétrées?

Était-ce utile?

La solution

J'ai fait des recherches et j'ai trouvé ceci:

  

Dans mes tests simples, il semble que   les paramètres passés dans le   ExecuteQuery et ExecuteCommand   les méthodes sont automatiquement codées en SQL   en fonction de la valeur fournie. Alors   si vous passez une chaîne avec un '   caractère, il sera automatiquement SQL   échapper à ''. Je crois un semblable   la politique est utilisée pour d'autres types de données   comme DateTimes, Decimals, etc.

http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx
(Vous devez faire défiler la liste pour le trouver)

Cela me semble un peu étrange - la plupart des autres outils .Net en savent plus que pour "échapper SQL". n'importe quoi; ils utilisent plutôt des paramètres de requête réels.

Autres conseils

LINQ to SQL utilise exec_sql avec des paramètres, ce qui est beaucoup plus sûr que la concaténation dans la chaîne de requête ad-hoc. Cela devrait être aussi sûr contre l'injection SQL que d'utiliser SqlCommand et sa collection Paramaters (en fait, c'est probablement ce que LINQ to SQL utilise en interne). Encore une fois, à quel point est-il en sécurité ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top