Опасность отправки SQL-запроса в качестве параметра?
Основной вопрос. Если у меня есть форма, которая запрашивает у пользователя его имя, адрес электронной почты и комментарии, и я сохраняю записи в базе данных... Что произойдет, если кто-то введет SQL-запрос, такой как:
DROP tablename
в разделе комментариев.
@Name,
@Email,
@Comments
INSERT INTO mytable (Name, Email, Comments) VALUES (@Name, @Email, @Comments)
Есть ли риск внедрения SQL или я совершенно безопасен?
Хранимая процедура SQL Server 2008 для обработки вставки.
3 ответа
Да, вы в безопасности.
SQL-инъекция работает путем изменения синтаксиса SQL-запроса путем интерполяции вредоносного ввода.
Но один параметр запроса всегда заменяет одно скалярное значение. Никакой злонамеренный ввод не может изменить синтаксис запроса, если вы используете параметры.
Вы можете использовать параметр объекта. Это может ограничить SQL-инъекцию. Не используйте встроенный SQL. Если вы используете встроенный SQL, отметьте одинарную кавычку ("'") внутри параметра.
Короткий ответ на ваш вопрос - вы в безопасности, если используете параметры.
(комментарии ниже немного выходят за рамки вашего первоначального вопроса, но я настоятельно рекомендую вам потратить некоторое время, чтобы узнать больше по этой теме)
Однако это не означает, что вы не должны проверять пользовательский ввод каким-либо образом. Даже несмотря на то, что вы защищены от внедрения SQL, неудачная проверка ввода пользователя может привести к загрязнению ваших данных практически всем, что будут вставлять люди.
Кроме того, убедитесь, что вы используете учетную запись с наименьшими привилегиями для еще большего повышения безопасности.
Вот хорошая статья на эту тему от MSDN.