1

Это может быть очень глупый вопрос, но я считаю, почему нет ...Потенциал для SQL-инъекций здесь?

Я использую RIA Services с Entity Framework в качестве задней части. У меня есть некоторые места в моем приложении, где я принимаю ввод пользователя и напрямую обращаюсь к службам RIA Services (и, в свою очередь, EF и, в свою очередь, к моей базе данных), используя их данные. Предотвращает ли какой-либо из этих уровней проблемы безопасности или я должен сам очистить свои данные?

Например, всякий раз, когда новый пользователь регистрируется с приложением, я называю этот метод:

[Query] 
public IEnumerable<EmailVerificationResult> VerifyUserWithEmailToken(string token) 
{ 
    using (UserService userService = new UserService()) 
    { 
     // token came straight from the user, am I in trouble here passing it directly into 
     // my DomainService, should I verify the data here (or in UserService)? 
     User user = userService.GetUserByEmailVerificationToken(token); 
     ... 
    } 
} 

(и должен ли я быть качению моя собственная система проверки пользователя является еще одной проблемой в целом, мы находимся в процессе принимая во внимание рамки членства MS. Меня больше интересуют услуги sql и службы RIA в целом)

ответ

3

инъекция SQL основана на неэкранированных строках используются при создании необработанного SQL строки

например

"SELECT * FROM `user` WHERE `name` = '" . $name . "'" 

уязвим, так как значение $name может содержать «метку и, таким образом, изменить значение заявление sql. хороший пример, если $ имя ' OR 1=1; -- следовательно, делает этот SQL-запрос:

"SELECT * FROM `user` WHERE `name` = '' OR 1=1; --'" 

, который очень полезен для обхода проверки пароля я могу вам сказать :)

правильный способ обойти это, спасаясь от " character to \ '(для mysql). поэтому языки, такие как php, предоставляют mysql_real_escape_string. однако, если вы используете надлежащую параметризованную систему запросов, то вы можете пройти через все, что вам нравится, и библиотека убежит от нее правильно.

глядя на свой коде, нет никаких причин, чтобы проверить значение token если ваш UserService не делает некоторое хитроумное поколение SQL-строки (и я уверен, что сущность-рамка не делать этого, так что вы должны быть очень хорошо)

+0

вы должны ВСЕГДА запросов к базе данных скраб-х, независимо от того, где они произошли. Есть очень интересные способы выполнения SQL-инъекций, когда программист этого не ожидал. И очистка ввода не является ресурсоемкой. – TheLQ

+0

уверен, что если библиотека/фреймворк уже очищает их? в противном случае вы можете получить неверные данные (например, данные с двойным экранированием). – oedo

2

Вы должны быть в безопасности, я уверен, что EF генерирует параметризованные запросы для извлечения данных из вашей базы данных.

3

EF будет параметризировать это для вас, но если вы действительно хотите, чтобы убедиться, что запустить SQL Profiler и посмотреть, что отправляется в SQL Server

 Смежные вопросы

  • Нет связанных вопросов^_^