此登录会话是否安全?

时间:2011-12-17 13:28:56

标签: php security

我使用PHP会话创建了一个登录系统。

以下是它的工作原理:

1。)用户登录时(使用有效的登录信息): 他们的信息(usernamepassword)存储在会话中,还有一些其他信息: The Expire time:这只是在当前时间上添加了5分钟(因此,如果用户登录时间为22:30,则到期时间为22:35)。

2.。)在登录用户的每个页面视图中: 检查会话以查看是否存在。如果没有,则将用户重定向到登录页面。如果会话确实存在,则会检查expire time并将其与current time进行比较。如果expire time多于current time(用户已停用5分钟以上),则会检查他们的用户详细信息(在会话中)(与数据库中的相比)和{{1会话已更新,但如果Expiretime小于expire time,则不会检查任何详细信息,更新current time会话并允许用户继续。我这样做是为了防止不断查询数据库以节省带宽。

基本上,一旦用户成功登录,他们的用户名和密码就不会再次在数据库上检查,直到他们变为非活动状态(停留在一页)5分钟或者他们退出。

FORGOT提到一些人: 过期时间会话实际上称为expire timeexpire_time_unique_characters),这意味着邪恶的人在伪造会话时也必须找到$_SESSION['expire_time_'.$unique_nu] ...

我只是觉得它不太安全。

此外,这个项目是开源的(人们可以看到源代码),因此在这里带来更大的风险......

你能给我一些反馈吗?

由于

2 个答案:

答案 0 :(得分:2)

在会话中存储用户ID已经足够了。

但是,你应该对会话固定/劫持实施某种保护。

答案 1 :(得分:0)

$_SESSION相对安全,只要它被正确使用。例如,如果将会话文件保留在Web根目录下,则除了可以直接访问服务器文件系统本身的人员之外,无法访问它们。出于这个原因,您仍然希望保持密码加密,但纯文本用户名完全正常。

将会话ID保存在cookie中而不是使用查询字符串方法,否则复制URL的任何人都会无意中共享其会话并绕过登录。

应该这样做。显然,如果某人正在攻击用户的网络并获取cookie数据,那么他们就可以使用它假装成用户,但是你几乎无能为力。您可以使其变得更难(例如,要求用户代理字符串相同),但最终如果用户的网络受到威胁,您无能为力。无论如何,保护他们的网络,而不是他们服务器上的数据,都不是你的责任。