Проводит ли ADO.NET санацию подстановочных знаков из строки SqlParameters? - PullRequest
0 голосов
/ 02 марта 2011

Санирует ли ADO.NET символы подстановки (т. Е. "%" Или "_") в строковых параметрах типа SqlParameters?Кроме того, это нужно?Я пробовал поискать в Google, но трудно найти именно то, что я хочу знать.

Например, предположим, у меня есть параметризованный запрос:

string sql = "SELECT * FROM Users WHERE UserName LIKE @prefix";

SqlCommand command = new SqlCommand(sql, connection);
command.Parameters.AddWithValue("prefix", User.UserName);
//etc...

Но пользователь каким-то образом управляетчтобы получить себе имя пользователя типа %.Его идея заключается в том, что он увидит всех пользователей, а не только тех, кого он должен был видеть.Будет ли это работать, или % получит а) экранирование при параметризации значения, или б) будет оцениваться как литерал % сервером SQL?

Обратите внимание, что я понимаю, что выше будетдействительно паршивый дизайн.Это всего лишь выдуманный пример.


Редактировать: Я подтвердил, что опцию b) не произошло.

declare @prefix as varchar(10);
set @prefix = '%';
select * from MyTable where MyField like @prefix;
--returns everything

Ответы [ 2 ]

2 голосов
/ 02 марта 2011

Нет! Дезинфицировать нечего, это действительное значение. Это ваша проблема, что вы положили это в LIKE заявление. ADO.net предотвращает ' и другие символы, которые могут вызвать инъекцию.

1 голос
/ 02 марта 2011

Тебе нужно убежать сам, это сделает:

string sql = "SELECT * FROM Users WHERE UserName LIKE (@prefix + '%') ESCAPE '~'";
SqlCommand command = new SqlCommand(sql, connection);
command.Parameters.AddWithValue("prefix", User.UserName.Replace("~", "~~").Replace("%", "~%"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...