执行如下所述的like语句会导致任何安全问题或SQL注入。 而且,如果可以,如何减轻风险?
以下脚本将在存储过程中执行;使用like
查询的推荐方法是什么?
此代码段是从参数化存储过程中复制的。
declare @args varchar(100) ='SID%' -- start with
-- set @args ='SID01' -- exact match
-- set @args ='%%' -- all
-- set @args = '%VV%' -- contains
-- set @args ='SID%' -- start with
-- set @args ='%JUN' -- end with
select * from Employee e where e.LastName like @args
答案 0 :(得分:2)
如果在SQL中使用类型变量作为参数,则可以免受SQL Injection攻击。 当攻击者可以访问动态SQL时,SQL注入才起作用。
这是不安全的:
DECLARE @sql nvarchar(50)=N'select * from Employee e where e.LastName like '''+@args+''''
EXEC sys.sp_executesql @sql
这很安全:
select * from Employee e where e.LastName like @args