Защищает ли EXECUTE AS от SQL-инъекций? - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть ситуация, когда мне нужно сделать это

CREATE PROCEDURE search_sp @condition varchar(8000) AS
    SELECT * FROM tbl WHERE @condition

Если я добавлю в базу данных пользователя, у которого есть только роль 'db_datareader', а затем использую команду execute as для переключения контекста на этого пользователя в целях выполнения оператора select, защитит ли это меня от внедрения SQL? например,

DECLARE @cookie varbinary(100);
EXECUTE AS USER = 'restricted__user' WITH COOKIE INTO @cookie;

DECLARE @SQL AS NVARCHAR(MAX)
SET @SQL= 'SELECT * FROM tbl WHERE ' + @condition
EXEC sp_executesql @SQL

REVERT WITH COOKIE = @cookie;

Ответы [ 2 ]

2 голосов
/ 21 февраля 2011

Нет, не будет. Это ограничит количество запросов, которые могут быть запущены, если их внедрить, если даже «ВЫПОЛНИТЬ КАК ПОЛЬЗОВАТЕЛЯ» даже оценивается. Это не остановит что-то вроде foo' or 1 = 1; /* ..., что может быть в случае, когда «ВЫПОЛНИТЬ ПОЛЬЗОВАТЕЛЯ» никогда не достигается. Требуется правильная обработка ввода.

0 голосов
/ 21 февраля 2011

Что происходит, когда я передаю «1 = 1» в качестве условия?

Теперь вы отправляете обратно все строки в «tbl».Если таблица, скажем, пользователи, у меня теперь есть все имена пользователей и все пароли (надеюсь, они хешированы и засолены ...).

...