sql注入会话

时间:2012-02-01 22:53:31

标签: php sql sql-injection

我使用mysql_real_escape_string()来阻止sql注入下面的$ field变量。我应该在$ _SESSION ['user_id']中使用相同的内容吗?

我无法想象某人能够更改$ _SESSION数组中的值。他们可以吗?

$query = "SELECT `".mysql_real_escape_string($field)."` FROM `users` WHERE         `id`='".$_SESSION['user_id']."'";

4 个答案:

答案 0 :(得分:5)

他们无法更改$_SESSION数组,但您的问题完全取决于您初始化$_SESSION['id']的方式。通常,您应始终在SQL查询中转义值。不要试图猜测是否可以从用户输入修改值,只是逃避它们。

答案 1 :(得分:2)

客户端无法更改您的SESSION值。

但我相信有权访问您服务器的人可以。 (但那时你应该担心其他事情)

答案 2 :(得分:0)

如果您的会话变量填充了用户变量,那么您的会话变量就像任何其他用户操作变量一样容易受到SQL注入攻击。您将来也可能会这样做,忘记返回并转义SQL查询。

对于逃避所有事情并将其转移到最后一刻(即将值传递给查询时),不会造成任何损害;这避免了对变量的任何其他操作,否定了逃逸的影响。

答案 3 :(得分:-1)

  

我使用mysql_real_escape_string()来阻止sql注入

这就是你做错了。

mysql_real_escape_string()不会阻止任何注入。

此功能用于字符串格式化,不应用于其他任何内容 要格式化一个标识符,你必须将它包含在反引号中并转义

中的反引号