首页 > 解决方案 > like 语句是否会吸引 SQL 注入

问题描述

下面提到的 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

标签: sqlsql-server

解决方案


如果您在 SQL 中使用类型化变量作为参数,您就可以免受 SQL 注入攻击。当攻击者可以访问动态 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

推荐阅读