SQL注入是否可以破坏此存储过程:
2,0x00
答案 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'%';