2012-01-31 2 views
9

Это моя первая разработка с использованием MVC, и я хочу сделать ее безопасной.Управление SQL-инъекцией в MVC

Когда я использую HtmlEncode, он преобразует строку в эквивалентную строку HTML.

Пользователь может указать в поиске пример ali 'или ali-- и они существуют в моей базе данных. Как контролировать мой поиск и логин из SQL-инъекции, пожалуйста?

Также любой учебник или рекомендация по предотвращению инъекции скрипта?

+0

Как вы получаете доступ к своей базе данных? LINQ? Entity Framework? –

+0

Я использую обычный, который вы предпочитаете LINQ или инфраструктура Entity. – AMH

+1

Проверьте это [SO link] (http://stackoverflow.com/questions/8676/entity-framework-vs-linq-to-sql) ... Оба будут проверять для SQL-инъекции для вас .... –

ответ

15

LINQ и Entity Framework уже проверяют SQL-инъекцию для вас.

Но вы должны прочитать документацию абы:

LINQ MSDN Link (раздел SQL-Injection атаки)

Entity Framework MSDN Link (раздел Вопросы безопасности для запросов)

Надеется, что это помогает!

+0

как насчет инъекции скрипта – AMH

+0

@AMH Я считаю, что это должен быть другой вопрос, но эта ссылка может быть полезна: [asp tutorials] (http://www.asp.net)/mvc/tutorials/old-versions/security/prevent-javascript-injection-attack-cs) –

+0

, который вы предпочитаете, пожалуйста, LINQ или EF – AMH

4

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

+0

спасибо, что он поддерживает базы данных ПЗУ, как насчет сценария инъекции, пожалуйста, – AMH

7

До тех пор, пока вы используете параметризованные запросы или ORM, такие как NHibernate или Entity Framework, вам не нужно ничего делать, чтобы предотвратить SQL-инъекцию. Параметры передаются на сервер за пределами фактического оператора SQL, как часть вызова RPC на сервер. Большинство ORM используют параметризованные запросы для аргументов производительности, поэтому они не уязвимы для SQL-инъекций.

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

При этом вам все равно придется опасаться ввода пользователем, чтобы предотвратить атаки с помощью сценария. К счастью, ASP.NET MVC уже предоставляет механизм проверки запроса (см. Understanding Request Validation).

+0

, но я устал отбрасывать базу данных, которую я знаю, передавая значения по параметрам – AMH

+0

Независимо от того, что вы передаете параметру (и по параметру I меняет объект, полученный из DbParameter, например SqlParameter (http://msdn.microsoft.com/en-us/library/system.data.common.dbparameter.aspx), он будет передаваться серверу как простая строка. Он никогда не выполняется. У вас все еще могут возникнуть проблемы, если вы используете сохраненное значение для построения инструкции SQL путем конкатенации строк в какой-либо другой части вашего приложения. –

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