Je crée un site public et la première chose à écrire est l'injection SQL. J'ai des champs de texte que je suis en train d'enregistrer et j'utilise LINQ pour mettre à jour/écrire dans la base de données. Suis-je en sécurité avec Linq?
Cet exemple crée le compte d'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 en sécurité? Linq paramétrise-t-il le SQL qu'il génère automatiquement?
Oui, LINQ aidera à arrêter l'injection SQL.
LINQ to SQL transmet toutes les données à la base de données via des paramètres SQL. Ainsi, bien que la requête SQL soit composée de manière dynamique, les valeurs sont substituées au serveur par des paramètres de protection contre la cause la plus courante des attaques d'injection SQL.
Aussi, voir Éliminer les attaques d'injection SQL sans douleur avec LINQ pour certaines informations.
Vous êtes prêt à partir. LINQ paramètree les données qu'il envoie à la base de données.
Utilisez la propriété en journal pour vérifier ce qui se passe: dc.Log = Console.Out;
Il convient que la SQL émise utilise des paramètres nommés qui ne peuvent pas être exploités pour exécuter SQL arbitraire.