我想知道是否有必要逃避内部变量,这些内部变量来自数据库本身并且是用户输入的。这只是浪费性能还是更安全?
谢谢!
答案 0 :(得分:1)
您必须转义所有用户输入,甚至包括服务器变量等内容。如果从数据库中提取值而不是通过用户输入以任何方式触及该值,则在查询中重用时不需要对其进行转义,除非它包含在通过字符串连接传入时会破坏该查询的字符。
例如,我将数据库中的名称O'Brien
拉入PHP变量$name
,然后在另一个语句中尝试将其重新放入,如下所示:
$query = "INSERT INTO table (id, name) VALUES (123, '$name');";
这将打破查询,因为我无法逃脱O'Brien中的'
。
答案 1 :(得分:1)
您无需担心这一点。如果数据库中的值具有任何保留的名称,则无关紧要,因为它不会被解释。
您应该担心sql注入并确保您运行的任何语句插入,删除,选择或更新来自用户输入的数据都会转义单引号和其他字符。即使是普通用户 - 没有任何不良意图 - 会使用单引号也会产生错误。
如果用户使用的用户名如下:
joe'; drop table users; --
你可能遇到麻烦了。
希望这有帮助!