如何在客户端使用多个IP地址时正确授权网站登录

时间:2017-02-23 14:38:06

标签: authentication ip-address

我有一个内置于2015年的自定义网站登录系统,运行良好,据我所知,在网站之间提供高级别的安全性和真实性,客户端登录到登录网站,他们的详细信息是保存到会话,然后客户端转移到目标网站,在那里他们执行他们的行动。

安全性需要几个关键值,并在每次加载页面时对它们进行身份验证以检测不一致性,其中包括:

  • 哈希包含其他浏览器密钥(如果给出)
  • 为每次成功登录生成一次客户端的哈希值。
  • IP地址
  • 登录日期和上次采取的行动
  • 数据库记录和跟踪所有上述细节。

这是基于如果客户端登录并以某种方式更改上述任何值,则认证过程将检测到不一致然后丢弃身份验证。

这样可以正常工作,但是我有问题;两个客户端在不同的系统上(一个在代理上,一个是负载均衡器),它们似乎正在围绕当前的IP地址会话中心进行交换。

我知道IP地址可以并且可以进行交换和更改,但我考虑的是一个相当小的用户群(~250),这将是一个边缘情况。我确实/不希望IP地址在会话期间更改(即,一旦他们登录到身份验证网站,但在登录目标网站之前,或在目标网站上)。

我没有考虑代理连接和负载均衡器等问题。

使用的IP地址检测基于PHP,是:

public static function IpAddr()
    {
        if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
            $exploded_IP = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
            $ipAddress = array_pop($exploded_IP);
        } elseif (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) {
            $exploded_IP = explode(',', $_SERVER['HTTP_CLIENT_IP']);
            $ipAddress = array_pop($exploded_IP);
        } elseif (array_key_exists('HTTP_X_FORWARDED', $_SERVER)) {
            $exploded_IP = explode(',', $_SERVER['HTTP_X_FORWARDED']);
            $ipAddress = array_pop($exploded_IP);
        } elseif (array_key_exists('HTTP_FORWARDED_FOR', $_SERVER)) {
            $exploded_IP = explode(',', $_SERVER['HTTP_FORWARDED_FOR']);
            $ipAddress = array_pop($exploded_IP);
        } else {
            $ipAddress = $_SERVER['REMOTE_ADDR'];
        }
        unset($exploded_IP);
        return $ipAddress;
    }

问题

  • 以安全的方式处理这些不一致的最佳方法是什么?

    • 我是否仍然需要记录并使用IP地址作为可检查值?
  • 服务器有没有可靠的方法来“检测”用户是否在多个IP地址上“浮动”,但仍然可以判断为是经过身份验证的用户?

0 个答案:

没有答案