【问题标题】:is session_id(md5(ip-address)) secure enough?session_id(md5(ip-address)) 足够安全吗?
【发布时间】:2013-08-08 22:04:41
【问题描述】:

我将创建一个登录屏幕。 因此,如果用户输入正确的用户名和密码,我将创建一个这样的会话:

session_start();
$my_session_id = session_id(md5("user's remote ip address") );

然后我要将 $my_session_id 保存回用户表中。

每次加载页面时,我都会根据数据库中的字段检查 session_id() 以验证会话是否良好。

假设数据库是安全的,代码是否足够好和安全?

**编辑:好的,我知道它不安全,但是这样呢:

session_start(); 
session_id(); 
session_regenerate_id(true); 
$new_session_id = session_id();
//save the new_session_id into table
set $_SESSION['user_ip'] = user's remote ip

然后在每个页面上检查 $_SESSION['user_ip'] 和 session_id 与数据库字段

够好吗? **

【问题讨论】:

  • 否;显然不是。数百个用户可以共享同一个 IP 地址。
  • 不,在 NAT 的情况下非常危险。

标签: php security session sessionid


【解决方案1】:

不,根本不是。我可以为任何 IP 重新创建会话 ID,从而劫持任何会话。只需保留默认的 session_id,确保在登录时始终使用regenerate(以防止会话固定攻击)并将 IP 与会话一起存储,以验证会话实际上属于用户。

【讨论】:

  • 我已经编辑了我的问题。请您再检查一下,看看现在是否足够好?
  • 我们是否需要定期重新生成 session_id 以防止会话劫持?
【解决方案2】:

不,这根本不安全。你为什么要这样做?如果要将会话绑定到 IP 地址,请将 IP 存储在会话变量中并检查它。

【讨论】:

    【解决方案3】:

    当您开始会话时,它已经创建了自己的会话 ID。不建议自己创建。

    如果您想将其存储在表中,您可以通过$sessionId = session_id(); 获取并存储在表中。会更好。

    更多信息您可以去:http://in3.php.net/session_id

    【讨论】:

      【解决方案4】:

      您应该检查具有动态 IP 的用户

      【讨论】:

        猜你喜欢
        • 2014-09-17
        • 1970-01-01
        • 1970-01-01
        • 2014-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多