Предотвращение внедрения SQL через «quotename» с помощью хранимой процедуры - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь сделать код "sql-инъекция-доказательство".Мне посоветовали использовать QUOTENAME.

. Это работает:

select 'abc[]def'

и дает результаты, аналогичные

select QUOTENAME('abc[]def')

Однако пока работает следующее:

exec sp_spaceused 'STMALOGqueue'

Это не:

exec sp_spaceused QUOTENAME('STMALOGqueue')

Я получаю досадную ошибку:

Incorrect syntax near 'STMALOGqueue'

Фактический код, который я пытаюсь проверить с помощью инъекции, жестко закодирован внемного C #.Для справки:

string sp_spaceused = @"
drop table if exists #temp
create table #temp(name nvarchar(100), rows int, reserved nvarchar(100), data nvarchar(100), index_size nvarchar(100), unused nvarchar(100))

insert into #temp
exec sp_spaceused QUOTENAME('{0}')";

Я использую String.format, чтобы вставить соответствующее имя таблицы в эту строку и затем выполнить ее.В настоящее время это не работает

1 Ответ

0 голосов
/ 10 октября 2018

Сохранить QUOTENAME('STMALOGqueue') результат в переменной и использовать его для параметра хранимой процедуры:

declare @test as varchar(100)

set @test = QUOTENAME('STMALOGqueue')

exec sp_spaceused @test

это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...