необходимо немного помочь с этой проблемой впрыска sql:SQL-инъекция с параметризованными процедурами
Ниже приведена версия параметризованной хранимой процедуры. Исключая, как он вызван из приложения, существует ли способ предотвратить обращение @v_string к динамическому SQL?
Я думаю, что это довольно непроницаемый для воды - нет исполняемого или объединенного sql, но все же вставка точки с запятой позволяет возвращать дополнительные данные.
Я знаю, что есть несколько уровней, чтобы рассмотреть этот вопрос, но я хочу знать, есть ли какое-то простое решение, которое мне не хватает здесь, поскольку большинство исправлений для инъекций связаны с динамическими запросами.
create table dbo.Employee (EmpID int,EmpName varchar(60))
declare
@v_id int,
@v_string varchar(60)
begin
set @v_string='test'''; waitfor delay '0:0:5' --
if @v_id is null
begin
set @v_id = (select EmpID
from Abc.Employee
where [email protected]_string);
end
print @v_id
end
Единственный раз, когда вы получите в беду, если СП использует параметры в запросе, непосредственно предоставленный пользователем, и они непосредственно объединяются в оператор выбора (в отличие от того параметры). –
"Вставка точки с запятой позволяет возвращать дополнительные данные". Я не вижу, как это может произойти. Можете ли вы дать нам подробную информацию о том, где вы вставляете эту точку с запятой, и как вы знаете, что из-за этого возвращаются дополнительные данные? –
замените задержку ожидания с помощью select * from sys.databases –