这是理论上有效的方法来防止SQL注入吗?

时间:2015-07-06 22:40:00

标签: sql code-injection

我知道有一些方法(逃避/准备好的陈述)可以防止注射。但是,对于“有趣”,您认为以下方法有效吗?

假设您有一个字符串。你得到字符串并在每个字符之间添加“空格”。

这样,即使存在某种安全漏洞,命令也没有意义,因为添加“空格”使它们失效。

我理解存在性能问题和问题......但理论上,它会起作用吗?

3 个答案:

答案 0 :(得分:1)

即使这是一个基于“意见”的问题,我仍然会回答。 “没有。” :)这不会防止所有可能的情况。最有可能的是它会使某些形式的注射更加困难,但肯定不是全部。这就是原因。

除了将数据呈现为不太可能反映您真正想要存储的内容的格式之外,引入空格也无法正确解决问题。例如,某些应用程序会在数据库查找中将用户输入作为整数值引入。

假设:

 SELECT * FROM table WHERE id=$user_input_value

用户输入:      1OR1 = 1

呈现声明:

 SELECT * FROM table WHERE id= 1 OR 1 = 1

这仍然是完全有效的SQL,并将返回表中的所有行。等号周围的空格将被丢弃。

答案 1 :(得分:1)

这将分解多个字符的任何运算符或关键字。攻击者需要使用以空格分隔的单个字符来造成伤害。让我们看看我们能做些什么。

假设一个名为c的单字符列:

SELECT 1
FROM (VALUES (1234)) x(c)
WHERE c = '" + injectedSql + "'

进样

' + c + '

给出:

SELECT 1
FROM (VALUES (1234)) x(c)
WHERE c = '' + c + ''

PWNED。

答案 2 :(得分:1)

没有

SQL injection is defined as the modification of the intended SQL command.如果一个字符甚至能够修改它(例如,单引号过早地结束字符串文字,导致语法错误),则认为它是SQL注入。