Я проповедовал как моим коллегам, так и здесь о том, как использовать параметры в SQL-запросах, особенно в приложениях .NET. Я даже зашел так далеко, что обещал им предоставить иммунитет против атак SQL-инъекций.Достаточно ли параметров, чтобы предотвратить инъекции Sql?
Но я начинаю задаваться вопросом, действительно ли это так. Существуют ли какие-либо известные атаки SQL-инъекций, которые будут успешными против параметризованного запроса? Можете ли вы, например, отправить строку, которая вызывает переполнение буфера на сервере?
Есть, конечно, другие соображения, которые необходимо сделать для обеспечения безопасности веб-приложения (например, для дезинфекции ввода пользователя и всего этого), но теперь я думаю о SQL-инъекциях. Меня особенно интересуют атаки на MsSQL 2005 и 2008, поскольку они являются моими основными базами данных, но все базы данных интересны.
Редактировать: Чтобы уточнить, что я имею в виду под параметрами и параметризованными запросами. Используя параметры, я имею в виду использование «переменных» вместо того, чтобы строить sql-запрос в строке.
Так вместо того, чтобы сделать это:
SELECT * FROM Table WHERE Name = 'a name'
Мы делаем это:
SELECT * FROM Table WHERE Name = @Name
, а затем установите значение параметра @name на объекте запроса/команды.
мы должны уточнить, что подразумевается под параметрами (как Джонатан Леффлера указывал) - Я думал, параметры хранимой процедуры, но есть также Parms и {0} Parms? ... – 2008-11-20 21:21:06
Намного проще сказать, мы не используем конкатенацию для построения запроса. – 2008-11-21 03:06:28
Поскольку тег asp.net, я полагаю, что вы создают веб-приложения. В этом случае вам также следует позаботиться о XSS-атаках и, возможно, о других – Spikolynn 2009-01-23 17:18:22