假设我有一个名为$ _SESSION ['id_user']的会话
并存储用户ID的会话。可以说用户配置文件是www.example.com/profile.php?id=123
如果我想检查该配置文件是否是用户以及我是否做了类似
如果(isset($ _ SESSION [ 'id_user']))
{
if($ _ SESSION ['id_user'] == $ _ GET ['id']){打印一些东西,因为这是用户自己的个人资料}
其他{print nothing}
}
以上代码是否良好?或者是他们的安全问题?或者将GET变量与SESSION变量进行比较是否明智?它不会打印任何可以提供用户身份的内容或任何我想要为访问自己个人资料的用户显示(编辑个人资料按钮)的内容。
答案 0 :(得分:4)
是的,它是安全的 - 会话存储在服务器上,用户无法手动更改会话数据。除非他们的会话是hijacked,否则只有他们能够看到自己的个人资料。
为了解决问题(并且为了防止可能的SQL注入,我在使用它们之前将这两个变量强制转换为(int)
s(同时减少必须多次写$_SESSION['id_user']
。我会还可以使用===
检查变量而不进行任何类型转换。
正如Thomas的评论中提到的,如果你已经在会话中获得了用户ID,那么除非你需要(区分配置文件),否则只需使用它并且不要通过GET发送用户ID。 / p>