2016-10-20 1 views

ответ

2

Нет, процедура не может быть скомпрометирована SQL Injection (выполнить произвольные операторы).

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

1

Нет, не в такой ситуации. SQL Injection - это, как правило, динамическая проблема SQL. Обратите внимание, этот процедурный и как я запускаю её (EXEC заявление намеренно закомментирована):

CREATE PROC dbo.usp_CanYouCompromiseMe (@Pattern VARCHAR(60)) 
AS 

DECLARE @sql varchar(1000) = 
'SELECT * 
FROM (VALUES (''xxx'')) x(SomeColumn) 
WHERE SomeColumn LIKE '''[email protected]+'%'';'; 

PRINT (@sql); 
--EXEC (@sql); 
GO 

Примечание это, как это:

EXEC dbo.usp_CanYouCompromiseMe 'x%'';SHUTDOWN WITH NOWAIT; PRINT'''; 

... создает этот SQL:

SELECT * 
FROM (VALUES ('xxx')) x(SomeColumn) 
WHERE SomeColumn LIKE 'x%';SHUTDOWN WITH NOWAIT; PRINT'%'; 
Смежные вопросы