Tsql 可以像@Pattern+';%';强加SQL注入风险?

Tsql 可以像@Pattern+';%';强加SQL注入风险?,tsql,security,Tsql,Security,SQL注入是否会破坏此存储过程: ALTER PROC [dbo].[usp_CanYouCompromiseMe] @Pattern VARCHAR(60) AS BEGIN SELECT * FROM SomeTable WHERE SomeColumn LIKE @Pattern+'%' END 不,SQL注入(执行任意语句)不能破坏该过程 但在某些情况下,它可能会表现得不好。如果您在某个列上有一个索引,并且希望它执行索引查找(可能您为模式设置了一个最小长度

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

ALTER PROC [dbo].[usp_CanYouCompromiseMe]
    @Pattern VARCHAR(60)
AS
BEGIN

SELECT  *
FROM    SomeTable
WHERE 
    SomeColumn LIKE @Pattern+'%'

END

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


但在某些情况下,它可能会表现得不好。如果您在某个列上有一个索引,并且希望它执行索引查找(可能您为模式设置了一个最小长度,以便索引对查找具有足够的选择性),则有人可以在模式的开头放置一个%符号,这样就不能再使用索引查找了。

不适用于类似的where子句。SQL注入通常是一个动态SQL问题。注意这个过程以及我如何运行它(EXEC语句故意注释掉):

请注意这一点:

EXEC dbo.usp_CanYouCompromiseMe 'x%'';SHUTDOWN WITH NOWAIT; PRINT''';
…创建此SQL:

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