我对这种情况表示怀疑。
我在存储过程中有这样的查询:
SELECT column1, column2
FROM table1
WHERE column1 like '%' + @column1 + '%'
我的问题是,这容易受到SQL注入?我是否需要将此更改为:(?)
declare @column1Like nvarchar(200);
@column1Like = '%' + @column1 + '%'
SELECT column1, column2
FROM table1
WHERE column1 like @column1Like
此致
答案 0 :(得分:9)
快速回答是否定的。要易受SQL注入攻击,必须使用动态SQL执行。
此易受攻击:
EXECUTE ('SELECT column1, column2 FROM table1 WHERE column1 like ' + @column1Like);
这也意味着两个示例之间没有真正的区别(至少从安全角度来看)。
答案 1 :(得分:3)
与=
或任何其他谓词没有区别。
但是,用户可以在模式中注入额外的通配符(%
,_
);如果重要的话。
答案 2 :(得分:2)
SELECT column1, column2
FROM table1
WHERE column1 like '%' + @column1 + '%'
由于此查询仅适用于变量,因此无法放置代码而非数据,因此不易受SQL
注入。
我当然假设@column1
这里是SQL Server
变量,并且您正在使用客户端语言中的参数化查询功能将值绑定到它。
答案 3 :(得分:1)
它不易受攻击,因为它已经是SQL空间中的字符串值。虽然,它可能会破坏查询。
答案 4 :(得分:1)
在任何一种情况下,您的查询都不容易受到SQL注入攻击,因为您使用的是参数化查询。
答案 5 :(得分:-1)
我认为它很脆弱,例如:
'%'或1 = 1 -
如果您没有像@column1Like
那样格式化它,将显示数据库的所有寄存器。
在这种情况下,我认为它与(@column1Like= ''
或@column1Like is null
)相同
但你必须考虑另一个例子,如
'%' union select SELECT `column11`, `column22`
FROM table2 where `colum11` -- is the same type than `column1`
--and `column22` is the same type than `column22`.