Я проповедовал как своим коллегам, так и здесь, о том, насколько хорошо использовать параметры в SQL-запросах, особенно в .NET-приложениях. Я даже зашел так далеко, что обещал им предоставить иммунитет против атак SQL-инъекций.
Но я начинаю задаваться вопросом, действительно ли это так. Существуют ли какие-либо известные атаки SQL-инъекций, которые будут успешными против параметризованного запроса? Можете ли вы, например, отправить строку, которая вызывает переполнение буфера на сервере?
Разумеется, есть и другие соображения, чтобы гарантировать, что веб-приложение безопасно (например, санировать ввод пользователя и все это), но теперь я думаю о SQL-инъекциях. Меня особенно интересуют атаки на MsSQL 2005 и 2008, поскольку они являются моими основными базами данных, но все базы данных интересны.
Изменить: уточнить, что я подразумеваю под параметрами и параметризованными запросами. Используя параметры, я имею в виду использование "переменных" вместо того, чтобы строить sql-запрос в строке.
Поэтому вместо этого:
SELECT * FROM Table WHERE Name = 'a name'
Мы делаем это:
SELECT * FROM Table WHERE Name = @Name
а затем установите значение параметра @Name в объекте query/command.