Только что начал новую работу, и я нашел безумно сложный вызов sp_executesql
(SQL Server 2008 R2). Я не могу решить, уязвим ли он для SQL-инъекции или нет.Комплекс sp_executesql - уязвим для инъекций?
определяется как единый C# string
(так нет доп Спасаясь) следующее:
declare @temp table(keyid int IDENTITY(1,1) PRIMARY KEY, name nvarchar(50));
insert into @temp (name) select distinct name from SOMEWHERE where [email protected];
declare @names nvarchar(max);
declare @dyn nvarchar(max);
-- dynamically build the columns
select @names = Stuff ((select '],['+name from @temp order by name for XML PATH('')),1,2,'')+']';
-- dynamically build the pivot query
set @dyn = N'select '+ @names +' from (select name, score from TABLE where code='''[email protected]+''') as p PIVOT
(max(score) for name in ('+ @names +')) as pivtab';
execute sp_executesql @dyn
И тогда вся партия выполняется как так
exec sp_executesql @query, N'@code nvarchar(500)',@code=N'..something..'
Так @code
является одновременно используется должным образом (в инструкции вставки), но также плохо использовались при построении @dyn
(и @names
тоже, одно из этих полей имен может содержать вредоносный скрипт).
Похоже на плохой запах кода, но я не могу написать значение для @code
, которое выполнит произвольный SQL. И мне не хватает полномочий просто заставить проблему.
Кто-нибудь знает, безопасен этот тип или нет? Спасибо
Если динамический поворотный душевнобольно комплекс вы, вероятно, не видят безумно сложные запросы. – lad2025
Но это безопасно? Мое предпочтение заключается не в том, чтобы использовать динамический SQL, как это. Я бы развернул его на прикладном уровне. – Hyjrt6534
@code vunerable для одного – Paparazzi