2010-03-30 86 views
0

如果我不小心加倍逃离一个字符串,数据库会受到伤害吗?双重逃逸是否可能对DB造成伤害?

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

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

bob's bike

我逃脱即:

bob\'s bike

但我的代码是可怕的,并再次逃脱它:

现在
bob\\\'s bike

,如果我插入到数据库中,在DB的值将是

bob\'s bike

这虽然不是我想要的东西,不会伤害DB。假设我采取了所有其他必要的安全预防措施,是否有可能双重逃脱对数据库执行某种恶意操作?

回答

1

在安全性方面,单次逃脱同样有害/无害,因为双重逃逸。

最大的问题是,你需要双unescape。否则,如果你只有single-unescape,你最终会在数据库输出中出现反斜杠。

例如,如果通过unescape()函数运行bob\\\'s bike,它将输出bob\'s bike,然后将打印到页面,除非您再次忽略它。但是不要多次嘲笑,因为这可以消除有意的反斜杠(并且可能造成更多伤害)。

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

1

假设我采取其他一切 必要的安全防范措施

硬编码SQL和/或参数值到应用程序不应该被认为是“采取必要的安全防范措施”,因为你永远是主题到SQL注入攻击(在Web应用程序的情况下)。

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

但是要回答你的问题,在数据库中存储bob\'s bike本身并不会造成任何伤害,但要小心考虑上面提到的其他问题,从安全角度来看,它们非常重要。