Подтвердить что ты не робот

Будет ли использование LINQ to SQL предотвращать SQL-инъекцию

Я создаю общедоступный сайт, и первое, что мне кажется, это SQL-инъекция. У меня есть некоторые текстовые поля, которые я сохраняю, и я использую linq для обновления/записи в базу данных. Можно ли использовать linq?

В этом примере создается учетная запись пользователя.

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

В этом примере изменяется пароль

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

Безопасны ли они? LINQ параметризует SQL, который он генерирует автоматически?

4b9b3361

Ответ 1

Да, LINQ поможет остановить SQL-инъекцию.

LINQ to SQL передает все данные в базы данных через параметры SQL. Так, хотя SQL-запрос составлен динамически значения подставляются сервер через параметры защиты от наиболее распространенных причиной атак SQL-инъекций.

Также см. Устранить SQL-инъекции без LINQ для получения некоторой информации.

Ответ 2

Тебе хорошо идти. Linq выполняет параметризацию данных, которые он отправляет в базу данных.

Используйте свойство Log, чтобы проверить, что происходит: dc.Log = Console.Out;

Ответ 3

Он должен, потому что испускаемый SQL использует именованные параметры, которые не могут быть использованы для выполнения произвольного SQL.