Безопасна ли эта хранимая процедура от внедрения SQL? - PullRequest
4 голосов
/ 02 ноября 2010

Хранимая процедура выглядит следующим образом:

CREATE PROCEDURE Foo
    @bar varchar(100)
AS

SELECT * FROM tablename
WHERE columnname LIKE '%' + @bar + '%'

Я пытался передать различные строки этой хранимой процедуре, но мне кажется, что это было бы безопасно от внедрения SQL, поскольку все между и включаяподстановочные знаки приводят к одной строке.

Ответы [ 2 ]

7 голосов
/ 02 ноября 2010

Если вы используете C # и ваш код выглядит следующим образом:

SqlCommand command = new SqlCommand("Foo", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@bar", myTextBox.Text);

тогда да!

Если это выглядит так:

SqlCommand command = new SqlCommand("EXEC Foo '" + myTextBox.Text + "'", connection);

тогда нет!

4 голосов
/ 02 ноября 2010

Да, это будет интерпретировать все данные внутри @bar как одно значение varchar (100). Вы все равно должны убедиться, что что-то передано в ваше приложение, поскольку LIKE '%%' по умолчанию возвращает все в вашей БД.

...