如果我意外地双重逃脱一根绳子,那么DB会受到伤害吗?
出于这个问题的目的,假设我没有使用存储过程或参数化查询
例如,假设我得到以下输入:
bob's bike
我逃避了:
bob\'s bike
但我的代码太可怕了,又一次逃脱了:
bob\\\'s bike
现在,如果我将其插入数据库,则数据库中的值将为
bob\'s bike
虽然不是我想要的,但不会伤害数据库。假设我采取所有其他必要的安全预防措施,那么双重逃逸的任何输入是否有可能对DB做恶意事情?
答案 0 :(得分:1)
假设我接受了所有其他的 必要的安全预防措施
将SQL和/或参数值硬编码到应用程序中永远不应被视为“采取必要的安全预防措施”,因为您将始终受到SQL注入攻击(如果是Web应用程序)。
如果可以,最好使用存储过程,如果这不是一个选项,至少应该使用参数化查询(绑定变量是另一个术语)。
但是要回答你的问题,将bob\'s bike
存储在数据库本身不会造成任何伤害,但要注意考虑上面提到的其他要点,从安全角度来看,它们至关重要
答案 1 :(得分:1)
单一逃避与安全方面的双重逃避同样有害/无害。
最大的问题是你需要双重视角。否则,如果您只使用单个unescape,则最终会在数据库输出中使用反斜杠。
例如,如果您通过unescape()函数运行bob\\\'s bike
,它将输出bob\'s bike
,然后将打印到页面,除非您再次取消它。但是不要忘记太多次,因为这可以消除有意的反斜杠(并可能造成更多伤害)。
这个问题与PHP的魔术引号有什么关系吗?好奇......