双重逃逸是否可能对DB造成伤害?

时间:2010-03-30 01:18:34

标签: database database-security

如果我意外地双重逃脱一根绳子,那么DB会受到伤害吗?

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

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

bob's bike

我逃避了:

bob\'s bike

但我的代码太可怕了,又一次逃脱了:

bob\\\'s bike

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

bob\'s bike

虽然不是我想要的,但不会伤害数据库。假设我采取所有其他必要的安全预防措施,那么双重逃逸的任何输入是否有可能对DB做恶意事情?

2 个答案:

答案 0 :(得分:1)

  

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

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

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

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

答案 1 :(得分:1)

单一逃避与安全方面的双重逃避同样有害/无害。

最大的问题是你需要双重视角。否则,如果您只使用单个unescape,则最终会在数据库输出中使用反斜杠。

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

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