Будет ли использование 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, который он генерирует автоматически?
Ответы
Ответ 1
Да, LINQ поможет остановить SQL-инъекцию.
LINQ to SQL передает все данные в базы данных через параметры SQL. Так, хотя SQL-запрос составлен динамически значения подставляются сервер через параметры защиты от наиболее распространенных причиной атак SQL-инъекций.
Также см. Устранить SQL-инъекции без LINQ для получения некоторой информации.
Ответ 2
Тебе хорошо идти. Linq выполняет параметризацию данных, которые он отправляет в базу данных.
Используйте свойство Log, чтобы проверить, что происходит: dc.Log = Console.Out;
Ответ 3
Он должен, потому что испускаемый SQL использует именованные параметры, которые не могут быть использованы для выполнения произвольного SQL.