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

Database 双重逃逸是否可能对DB造成伤害?,database,database-security,Database,Database Security,如果我不小心双重逃逸了一个字符串,DB会受到伤害吗 对于这个问题,假设我没有使用存储过程或参数化查询 例如,假设我得到以下输入: bob's bike 鲍勃的自行车 我可以逃避: bob\'s bike 鲍勃的自行车 但我的代码很可怕,并且再次逃脱: bob\\\'s bike 鲍勃的自行车 现在,如果我将其插入到DB中,DB中的值将是 bob\'s bike 鲍勃的自行车 虽然这不是我想要的,但不会伤害DB。假设我采取了所有其他必要的安全预防措施,任何双重转义的输入是否可能对数据库进行恶意操作

如果我不小心双重逃逸了一个字符串,DB会受到伤害吗

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

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

bob's bike 鲍勃的自行车 我可以逃避:

bob\'s bike 鲍勃的自行车 但我的代码很可怕,并且再次逃脱:

bob\\\'s bike 鲍勃的自行车 现在,如果我将其插入到DB中,DB中的值将是

bob\'s bike 鲍勃的自行车 虽然这不是我想要的,但不会伤害DB。假设我采取了所有其他必要的安全预防措施,任何双重转义的输入是否可能对数据库进行恶意操作

假设我把其他的都拿走了 必要的安全预防措施

决不能将SQL和/或参数值硬编码到应用程序中视为“采取必要的安全预防措施”,因为您将始终受到SQL注入攻击(对于web应用程序)

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


但是,为了回答你的问题,在数据库中存储<代码> Bob的自行车不会对自己造成任何伤害,但是请仔细考虑上面提到的其他点,从安全的角度来看,它们是非常重要的。

在安全方面,单次逃逸同样是有害的/无害的。 最大的问题是您需要将unescape加倍。否则,若您只使用一个unescape,那个么最终将在数据库输出中使用反斜杠

例如,如果您通过unescape()函数运行
bob\\\\\\\\\\\\\\\\\\\\\\\\\\\/code>,它将输出
bob的自行车
,然后将其打印到页面上,除非您再次对其进行unescape。但是不要太多次取消替换,因为这样可以消除有意的反斜杠(并且可能造成更多的伤害)

这个问题是否与PHP的magic quotes特性偶然有关?只是好奇