【问题标题】:Secure session check安全会话检查
【发布时间】:2013-10-09 11:30:40
【问题描述】:

我确实搜索了一些关于 PHP 中会话安全的信息,我发现了一些不错的东西,但我仍然不确定这对于会话保护是否正确和安全以免受常见攻击。

    public static function session_start()
    {
        ini_set('session.cookie_httponly', 1);
        ini_set('session.session.use_only_cookies', 1);
        ini_set('session.entropy_file', '/dev/urando');
        ini_set('session.cookie_lifetime', 0);
        ini_set('session.cookie_secure', 1);
        if(session_status() != 2) session_start();

        //fixation security step
        if(!isset($_SESSION[self::$_CHECK_KEY]) || $_SESSION[self::$_CHECK_KEY] !== self::$_CHECK_VAL)
        {
            session_regenerate_id();
            $_SESSION[self::$_CHECK_KEY] = self::$_CHECK_VAL;
        }

        //Hijacking secuity step
        if(isset($_SESSION[self::$_USER_AGENT]))
        {
            if(self::CryptPass(
                    $_SERVER['HTTP_USER_AGENT'], 
                    self::$_USER_SALT,
                    $_SESSION[self::$_USER_AGENT]) 
                !== $_SESSION[self::$_USER_AGENT])
            {
                $this->ReqLogin = true;
            }
        }
        else
        {
            $_SESSION[self::$_USER_AGENT] = self::CryptPass($_SERVER['HTTP_USER_AGENT'], self::$_USER_SALT);
        }
    }

所以我想知道有什么我可以做得更好的吗?有什么事情是我不应该做的?

【问题讨论】:

标签: php security session web


【解决方案1】:

安全是一个相当广泛的主题领域 - 您的代码没有解决很多问题,并且您还没有定义要解决的安全问题。例如,这对保护共享托管平台上的其他用户的会话没有任何作用。

暂且不说,显而易见的问题是 Chrome 浏览器可以在会话中自行升级(即用户代理发生变化)。我只在 Chrome(和 Chromium)浏览器中看到过这种情况,并且在会话中不应该发生多次。

跟踪 IP 地址的变化是个好主意 - 但这些也可能在会话中发生变化,例如跨多个代理负载均衡。但是网络提供商(在地址的 whois 数据中)很少会在会话中更改 - 这仍然可能发生,例如如果移动设备从只有 3G 连接的区域移动到 Wifi 热点。

您没有提供在身份验证状态更改时强制更改会话 ID 的显式方法。尽管固定/劫持涵盖了大多数可能性,但在这里进行显式更改仍然是一个好主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2012-06-25
    • 2017-10-15
    • 2012-07-22
    • 2010-11-12
    相关资源
    最近更新 更多