可以像@Pattern +'%'施加SQL注入风险?

时间:2016-10-20 17:51:39

标签: tsql security

SQL注入是否可以破坏此存储过程:

2,0x00

2 个答案:

答案 0 :(得分:2)

不,SQL注入不能破坏该过程(执行任意语句)。

但在某些情况下,它可能会行为不端。如果你在SomeColumn上有一个索引并期望它执行一个索引搜索(也许你设置了一个模式的最小长度,所以索引对于一个搜索有足够的选择性),有人可以在模式的开头放置一个%符号,所以索引搜索不能再使用了。

答案 1 :(得分:1)

No not in a where clause like that. SQL Injection is a generally a dynamic SQL issue. Note this proc and how I run it (the EXEC statement purposely commented out):

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

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

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

Note this how this:

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

...creates this SQL:

SELECT  *
FROM    (VALUES ('xxx')) x(SomeColumn)
WHERE SomeColumn LIKE 'x%';SHUTDOWN WITH NOWAIT; PRINT'%';