Потенциал для внедрения SQL здесь? - PullRequest
1 голос
/ 10 июня 2010

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

Я использую Службы RIA с 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 ]

3 голосов
/ 10 июня 2010

SQL-инъекция основана на неэкранированных строках, используемых при генерации необработанной SQL-строки.

Например,

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

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

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

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

правильный путьэто для экранирования «символа в» (для mysql).Вот почему такие языки, как php, предоставляют mysql_real_escape_string.однако, если вы используете правильную параметризованную систему запросов, то вы можете пройти через все, что вам нравится, и библиотека будет корректно ее избегать.

Если вы посмотрите на ваш код, нет смысла проверять значение token, если тольковаш UserService выполняет некоторую хитрую генерацию строки sql (и я уверен, что Entity Framework не делает этого, так что у вас все должно быть в порядке)

3 голосов
/ 10 июня 2010

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

2 голосов
/ 10 июня 2010

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

...