51 votes

L'utilisation de LINQ to SQL permet-elle d'éviter les injections SQL ?

Je suis en train de mettre en place un site public et la première chose qui me vient à l'esprit est l'injection SQL. J'ai quelques champs de texte que je sauvegarde et j'utilise linq pour mettre à jour/écrire dans la base de données. L'utilisation de linq est-elle sûre ?

Cet exemple crée le compte utilisateur.

Data.MemberRegistrationDataContext context = new MemberRegistrationDataContext();
Data.tbl_Member_UserProfile profile = new tbl_Member_UserProfile();
profile.SSN = Convert.ToDecimal(Session["tempMemberSSN_Registration"]);
profile.UserName = userName;
profile.Password = password;
profile.EmailAddress = email;
profile.QuestionID = qID;
profile.QuestionResponse = securityAnswer;
profile.LastModDt = DateTime.Now;
profile.LastModBy = "web";
context.tbl_Member_UserProfiles.InsertOnSubmit(profile);
context.SubmitChanges();

Cet exemple change le mot de passe

   MemberRegistrationDataContext dc = new MemberRegistrationDataContext();
   var mProfileRecord = dc.tbl_Member_UserProfiles.Single(c => c.SSN == sSSN);
   mProfileRecord.Password = sNewPassword;
   dc.SubmitChanges();

Sont-ils sûrs ? LINQ paramètre-t-il le SQL qu'il génère automatiquement ?

73voto

Galwegian Points 29966

Oui, LINQ aidera à stopper l'injection SQL.

LINQ to SQL transmet toutes les données au base de données via des paramètres SQL. Donc, bien que la requête SQL soit composée dynamiquement, les valeurs sont substituées côté serveur par le biais de paramètres ce qui permet de se prémunir contre les la cause la plus courante des attaques par injection SQL.

Voir aussi Éliminer les attaques par injection SQL sans difficulté avec LINQ pour plus d'informations.

14voto

David B Points 53123

Vous êtes prêt à partir. Linq paramètre les données qu'il envoie à la base de données.

Utilisez la propriété Log pour vérifier ce qui se passe : dc.Log = Console.Out;

3voto

Jan Bannister Points 1879

Il devrait car le SQL émis utilise des paramètres nommés qui ne peuvent pas être exploités pour exécuter du SQL arbitraire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X