2013-10-09 303 views
-1

我确实搜索了一些关于PHP会话安全性的信息,发现了一些不错的东西,但是iam仍然不确定这是否正确且安全,以防止常见攻击会话保护。安全会话检查

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); 
     } 
    } 

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

+0

看看这里http://stackoverflow.com/questions/328/php-session-security –

回答

0

安全性是一个相当广泛的话题 - 有很多东西你的代码没有解决,你没有定义正在解决的安全问题。例如,这对于在共享主机平台上与其他用户的会话无关。

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

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

您尚未提供强制更改身份验证状态时更改会话ID的显式方法。尽管固定/劫持涵盖大多数事件,但在这里做一个明确的改变仍然是一个好主意。