]> git.immae.eu Git - github/shaarli/Shaarli.git/blobdiff - index.php
Refactor client session hijacking protection
[github/shaarli/Shaarli.git] / index.php
index dbc2bb3b2f37336f06de4c9d1287c15bd059dad0..08a693274ae62ece828f17fff544817582f64dee 100644 (file)
--- a/index.php
+++ b/index.php
@@ -207,7 +207,7 @@ function setup_login_state($conf)
     }
     // If session does not exist on server side, or IP address has changed, or session has expired, logout.
     if (empty($_SESSION['uid'])
-        || ($conf->get('security.session_protection_disabled') === false && $_SESSION['ip'] != allIPs())
+        || ($conf->get('security.session_protection_disabled') === false && $_SESSION['ip'] != client_ip_id($_SERVER))
         || time() >= $_SESSION['expires_on'])
     {
         logout();
@@ -231,16 +231,6 @@ $userIsLoggedIn = setup_login_state($conf);
 // ------------------------------------------------------------------------------------------
 // Session management
 
-// Returns the IP address of the client (Used to prevent session cookie hijacking.)
-function allIPs()
-{
-    $ip = $_SERVER['REMOTE_ADDR'];
-    // Then we use more HTTP headers to prevent session hijacking from users behind the same proxy.
-    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip=$ip.'_'.$_SERVER['HTTP_X_FORWARDED_FOR']; }
-    if (isset($_SERVER['HTTP_CLIENT_IP'])) { $ip=$ip.'_'.$_SERVER['HTTP_CLIENT_IP']; }
-    return $ip;
-}
-
 /**
  * Load user session.
  *
@@ -249,7 +239,7 @@ function allIPs()
 function fillSessionInfo($conf)
 {
     $_SESSION['uid'] = sha1(uniqid('',true).'_'.mt_rand()); // Generate unique random number (different than phpsessionid)
-    $_SESSION['ip']=allIPs();                // We store IP address(es) of the client to make sure session is not hijacked.
+    $_SESSION['ip'] = client_ip_id($_SERVER);
     $_SESSION['username']= $conf->get('credentials.login');
     $_SESSION['expires_on']=time()+INACTIVITY_TIMEOUT;  // Set session expiration.
 }
@@ -1376,8 +1366,8 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
                 // The callback will fill $charset and $title with data from the downloaded page.
                 get_http_response(
                     $url,
-                    $conf->get('general.download_max_size', 4194304),
                     $conf->get('general.download_timeout', 30),
+                    $conf->get('general.download_max_size', 4194304),
                     get_curl_download_callback($charset, $title)
                 );
                 if (! empty($title) && strtolower($charset) != 'utf-8') {