Czy użycie LINQ do SQL pomoże zapobiec SQL injection

Konfiguruję publiczną stronę i pierwszą rzeczą, o której myślę, jest SQL injection. Mam kilka pól tekstowych, które zapisuję i używam linq do aktualizacji/zapisu do bazy danych. Czy używam linq bezpiecznie?

Ten przykład tworzy konto użytkownika.

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();

Ten przykład zmienia hasło

   MemberRegistrationDataContext dc = new MemberRegistrationDataContext();
   var mProfileRecord = dc.tbl_Member_UserProfiles.Single(c => c.SSN == sSSN);
   mProfileRecord.Password = sNewPassword;
   dc.SubmitChanges();
Czy są bezpieczne? Czy LINQ parametryzuje generowany automatycznie SQL?
Author: John Saunders, 2009-01-23

3 answers

Tak, LINQ pomoże zatrzymać SQL injection.

LINQ do SQL przekazuje wszystkie dane do bazy danych poprzez parametry SQL. Więc, chociaż zapytanie SQL składa się dynamicznie, wartości są zastępowane po stronie serwera poprzez parametry zabezpieczenie przed najczęstszymi przyczyna ataków SQL injection.

Zobacz również eliminowanie ataków SQL Injection bezboleśnie za pomocą LINQ, aby uzyskać pewne informacje.

 70
Author: Galwegian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-23 15:00:54

Możesz iść. Linq parametryzuje dane, które wysyła do bazy danych.

Użyj właściwości Log, aby sprawdzić, co się dzieje: dc.Log = Console.Out;

 14
Author: Amy B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-23 15:01:32

Powinno być, ponieważ emitowany SQL używa nazwanych parametrów, których nie można wykorzystać do wykonania dowolnego SQL.

 3
Author: Jan Bannister,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-23 15:02:03