2010-08-06 56 views
0

所以我想知道如果我这是好的,或者如果theres另一个更好和安全的解决方案,从数据库中获取信息。php:从数据库中抓取用户信息,这段代码是否安全?

if (isset($_SESSION['user_id'])) { 
$string = mysql_query("SELECT * FROM users WHERE id = '$_SESSION[user_id]'"); 
$v = mysql_fetch_array($string); 
} 

因为我想也许它可能破解了“会话”,改变USER_ID到另一个,他们可以访问任何用户woops ...

谢谢

回答

4

这取决于user_id如何首先进入会话。作为一个经验法则,你不应该把任何unsanitized值放入查询中。
您至少应该使用mysql_real_escape_string。 更好的是不使用the old and outdated mysql扩展名,但mysqli's prepared statements

+0

user_id在登录时进入会话: $ _SESSION ['user_id'] = $ id;我忘记了转义字符串,我是否应该对会话线做任何事情? – Karem 2010-08-06 15:38:27

+0

@Karem是的。上面的经验法则确实适用于任何外部输入。即使您认为这可能是保存:清理所有用户输入。 – Gordon 2010-08-06 15:40:01

+0

消毒是什么意思,请你解释一下谢谢。 – Karem 2010-08-06 15:42:24

2

我建议逃脱user_id,只是为了确保。您还应测试是否找到任何行(可选,取决于使用情况)。

0

来自用户的每个数据都应该过滤,并且从不直接用于查询;这将避免SQL注入。

假设$_SESSION['user_id']的内容是' OR id = '12' //;该查询将变成SELECT * FROM users WHERE id = '' OR id = '12' //'。假设ID为12的用户帐户具有允许用户从网站中删除内容的特定权限,您可以想象其后果。