我使用mysql_real_escape_string()来阻止sql注入下面的$ field变量。我应该在$ _SESSION ['user_id']中使用相同的内容吗?
我无法想象某人能够更改$ _SESSION数组中的值。他们可以吗?
$query = "SELECT `".mysql_real_escape_string($field)."` FROM `users` WHERE `id`='".$_SESSION['user_id']."'";
答案 0 :(得分:5)
他们无法更改$_SESSION
数组,但您的问题完全取决于您初始化$_SESSION['id']
的方式。通常,您应始终在SQL查询中转义值。不要试图猜测是否可以从用户输入修改值,只是逃避它们。
答案 1 :(得分:2)
客户端无法更改您的SESSION值。
但我相信有权访问您服务器的人可以。 (但那时你应该担心其他事情)
答案 2 :(得分:0)
如果您的会话变量填充了用户变量,那么您的会话变量就像任何其他用户操作变量一样容易受到SQL注入攻击。您将来也可能会这样做,忘记返回并转义SQL查询。
对于逃避所有事情并将其转移到最后一刻(即将值传递给查询时),不会造成任何损害;这避免了对变量的任何其他操作,否定了逃逸的影响。
答案 3 :(得分:-1)
我使用mysql_real_escape_string()来阻止sql注入
这就是你做错了。
此功能用于字符串格式化,不应用于其他任何内容 要格式化一个标识符,你必须将它包含在反引号中并转义
中的反引号