0

如果我不小心双重转义一个字符串,数据库会受到伤害吗?

出于这个问题的目的,假设我没有使用存储过程或参数化查询

例如,假设我得到以下输入:

鲍勃的自行车

我逃避了这一点:

鲍勃的自行车

但是我的代码很糟糕,并且再次转义:

鲍勃的自行车

现在,如果我将其插入数据库,则数据库中的值将是

鲍勃的自行车

虽然不是我想要的,但不会损害数据库。假设我采取了所有其他必要的安全预防措施,任何双重转义的输入是否有可能对数据库造成恶意?

4

2 回答 2

1

假设我采取了所有其他必要的安全预防措施

将 SQL 和/或参数值硬编码到应用程序中不应被视为“采取必要的安全预防措施”,因为您将始终受到 SQL 注入攻击(在 Web 应用程序的情况下)。

如果可以,最好使用存储过程,如果这不是一个选项,至少应该使用参数化查询(绑定变量是另一个术语)。

但是要回答您的问题,存储bob\'s bike在数据库中本身不会造成任何伤害,但请注意考虑上面提到的其他几点,从安全角度来看,它们至关重要。

于 2010-03-30T01:22:53.980 回答
1

就安全性而言,单次转义与双重转义一样有害/无害。

最大的问题是您需要双重转义。否则,如果您只进行单次转义,您将在数据库输出中出现反斜杠。

例如,如果您运行bob\\\'s bikeunescape() 函数,它将输出bob\'s bike然后打印到页面,除非您再次取消转义。但是不要多次转义,因为这可以删除故意的反斜杠(并且可能会造成更大的伤害)。

这个问题是否与 PHP 的魔术引号功能有关?只是好奇...

于 2010-03-30T01:26:07.760 回答