我知道有一些方法(逃避/准备好的陈述)可以防止注射。但是,对于“有趣”,您认为以下方法有效吗?
假设您有一个字符串。你得到字符串并在每个字符之间添加“空格”。
这样,即使存在某种安全漏洞,命令也没有意义,因为添加“空格”使它们失效。
我理解存在性能问题和问题......但理论上,它会起作用吗?
答案 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注入。