PHP用户身份验证使用数据库和IP地址?

时间:2012-06-18 03:56:42

标签: php ip-address session-cookies authentication

我一直在考虑用户身份验证,使用会话/ cookie以及会话劫持带来的安全风险所带来的问题。我知道使用安全的https://是最有效的方法,以及regenerate_session_id()和使用随机字符串进行验证(在众多其他程序中)。

我的问题是:是否有可能采用放弃会话和cookie的方法,并仅使用数据库保存的变量?

以下是我的设置方法:

- 在用户表格中有一个可以容纳IP地址的列,以及一个可以作为布尔值的列。

- 当用户'登录'时,将用户的当前IP地址设置到数据库中,并将布尔值设置为false(如果用户不想被'记住')或者为true (如果他们这样做)。

- 在页面加载时,它使用存储在用户数据库中的IP地址检查当前IP地址。如果匹配,则认为该用户有效。

- 关闭窗口后,脚本会清除这些值,用户将“退出”。

- 如果用户想要“保持登录状态”(我知道这是一个巨大的安全风险),那么切换(布尔值)只会停用注销脚本,并且IP地址将保持存储状态用户。

这种方法的后备是什么?它甚至可能吗?

3 个答案:

答案 0 :(得分:5)

IP地址根本不是唯一标识用户的准确可靠方式。 IP可能在会话期间发生变化,并且多个用户代理可能正在使用相同的出站IP。

抱歉: - )

答案 1 :(得分:3)

我最近在系统上看到了这种IP检查,并且它导致了许多问题,即用户随时随机断开连接(每当动态IP发生变化时)。只是不要这样做,IP可以改变,所以你不能依赖它们。

最有可能的是,您应该查看现有的身份验证方法并尝试实现它。保持简单。

答案 2 :(得分:1)

现有的答案说“动态IP是一个问题”是绝对正确的。考虑通过3g连接的移动设备。每当用户走进新塔的范围时,他们的IP就会改变......