我想知道在会话中存储用户ID的风险是什么?
然后简单地做一个
if(isset($_SESSION['user_id'])){
login_user($_SESSION['user_id]);
}
会话是否足够加密,我们不必担心散列它们? 有人能够更改身份证的可能性有多大?
答案 0 :(得分:11)
会话默认存储在/tmp
中作为文件。除非您遇到directory traversal漏洞等安全问题,否则最终用户无法查看。
客户端看到的唯一部分是存储在cookie中的唯一哈希,该哈希映射到服务器上的相关会话。
答案 1 :(得分:2)
大多数应用程序都使用$_SESSION
。如果存在广泛的弱点,那么主要项目将以不同的方式做事。
答案 2 :(得分:1)
在$ _SESSION中存储用户ID是一种相当普遍的做法。
您可以选择使用某种形式的session_id()将会话信息(包括当前用户ID)存储在表中作为密钥。
会话信息以纯文本格式存储。
根据您的设置,会话位置在正确设置的服务器上应该是安全的。可以使用session_save_path()更改位置,这将克服潜在的位置问题。
答案 3 :(得分:0)
如果有人可以访问您的会话,他可能会访问更多内容。我不会哈希它,也确保它不会到达客户端
答案 4 :(得分:-2)
我建议不要只在会话中添加用户ID。例如:
1:在一个浏览器中创建一个帐户并登录。然后打开该浏览器并转到另一台计算机。
2:登录同一帐户并将其删除。现在使用不同的密码创建一个新帐户(如果用作id,则使用相同的用户名)。
3:回到你的另一台电脑做一些事情。您会发现现在很可能正在使用在另一台计算机上创建的帐户。
基本上,由于会话存储了id,这可能不一定属于同一个人,具体取决于iff帐户是否已更改等。如果不需要密码(因为您在拥有帐户时已经通过了该过程),那么它类似于闯入。
因此,当您从数据库中删除用户帐户时,数字ID可以重复使用(我见过的系统中约有2%执行此操作),这似乎只有工作机会。或者,如果用户ID是用户名(我见过大约20%)。
所以我建议将sessionid和密码哈希值(即md5,sha1)添加到会话中,并每次使用它们获取用户信息。