该存储过程是否被视为动态SQL或参数化查询?动态SQL vs参数化查询
CREATE PROCEDURE [dbo].[my_dodgy_sp]
@varchar1 varchar(50),
@varchar2 varchar(50)
AS
BEGIN
...
EXEC [dbo].[my_really_special_sp] @varchar1 @varchar2;
END
在顶部的樱桃额外的巧克力甜甜圈如果你能告诉我这是否是动态/参数化:
CREATE PROCEDURE [dbo].[my_super_dodgy_sp]
@varchar1 varchar(50),
@varchar2 varchar(50),
@stored_procedure_name sysname
AS
BEGIN
...
EXEC @stored_procedure_name @varchar1 @varchar2;
END
为了让超级傻瓜sp更少,你可以添加一些验证来确保@spname是'合法的'。 – MatBailie 2012-01-07 01:45:00
这是我困惑的地方。由于超级dodgy只是使用参数,这可能是一个参数化查询,在这种情况下,你不能注入SQL代码。所以它根本就不狡猾,你不需要验证。 – icc97 2012-01-07 01:52:07
你不能用'EXEC @sp @ param'注入代码。您只能提供对不同SP的引用。这是微妙的不同。我不完全同意dknaack的回答,所以我加了我自己的。我希望它可以帮助:) – MatBailie 2012-01-07 02:02:26