喜欢子句和sql注入

时间:2011-01-26 13:49:57

标签: sql tsql

我对这种情况表示怀疑。

我在存储过程中有这样的查询:

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

此致

6 个答案:

答案 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`.