Hashing de identificación de sesión - Cómo hacerlo más seguro y robusto

4

Escribí una clase de PHP que controla la sesión y las almacena en la base de datos en lugar de los archivos normales en el servidor, puede encontrarla en My Session Handler Class

En esa publicación, un usuario llamado @AnotherGuy ha planteado algunas inquietudes / fallas de seguridad sobre mi Session Fingerprinting methods , lo que me parece válido, y lo cito a continuación:

  

Ahora hasta lo último de lo que voy a hablar. Como dije al principio no soy   experto en seguridad, pero siento que su solución de huellas dactilares es sospechosa.   Imagina a dos personas diferentes de la misma compañía utilizando tu sitio.   La empresa utiliza un equilibrador de carga, que hace que su dirección IP sea la   mismo. Si todos los navegadores / clientes de la empresa son iguales, su huella digital   Para estas dos personas sería idéntico. Aunque estés comprobando   HTTP_X_FORWARDED_FOR encabezados que no puede confiar en los balanceadores de carga para enviar   el encabezado No puedo decirte cómo detectar correctamente las sesiones usando   La idea de la huella digital.

Se refería a las funciones getFingerPrint() & _isSuspicious($fp)

    /**
    * [_getFingerPrint generates session fingerprints md5(USER AGENT + SECURE SESSION + IP ADDRESS)]
    * @return [strings] [encryted session info fingerprint]
    */
    private function _getFingerPrint()
    {
        return md5($this->_user_agent.self::SECURE_SESSION . $this->_ip_address);
    }

    /**
    * [_isSuspicious check for possible session hijack attempt, by comaparing encrypted user system specific values against exoisting records ]
    * @param  [string]  $fp [session fingerprint]
    * @return boolean
    */
    private function _isSuspicious($fp)
    {
        return ($fp != $this->_getFingerPrint()) ? True : False;
    }

Estoy usando getFingerPrint() para generar un hash de sesión usando user agent + salt + ip address, y _isSuspicious() para verificar la huella digital generada nuevamente contra la huella digital almacenada en la base de datos. Parece que aborda el riesgo de seguridad hasta el mismo punto. , pero cuando los usuarios están en la red local (LAN, etc.) y también usan los mismos agentes del navegador, parecen ser viables al riesgo de seguridad de session hijacking .

También estoy usando la siguiente función para obtener la dirección IP del usuario,

/**
     * [_getRealIpAddr Get the IP address of the user]
     * @return [strings] [IP address of the client]
    */

    private function _getRealIpAddr()
    {
      if (!empty($_SERVER['HTTP_CLIENT_IP']))
      {
        /*check ip from share internet*/
        $ip     =   $_SERVER['HTTP_CLIENT_IP'];
      }
      elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
      {
        /*to check ip is pass from proxy*/
        $ip     =   $_SERVER['HTTP_X_FORWARDED_FOR'];
      }
      else
      {
        $ip     =   $_SERVER['REMOTE_ADDR'];
      }

      return $ip;
    }

Ahora, ¿cómo puedo hacer que la sesión sea más robusta cuando los usuarios comparten el mismo grupo de redes? La primera solución que me viene a la mente es agregar un COOKIE (sal aleatoria / número, etc.) al hashing que será particular para el sistema específico del usuario y, a pesar de tener el mismo agente de usuario & La dirección ip de dos usuarios tendrá diferentes cookies locales. ¿Alguien tiene alguna otra solución / opción mejor o una forma completamente diferente de manejar esta situación?

Edit 2: ¿Qué pasa con el uso de EVERCOOKIE [pero qué pasa si javascript está deshabilitado? ]!

    
pregunta Dimag Kharab 12.08.2015 - 07:15
fuente

1 respuesta

1

Mucho depende de lo que intenta hacer y de los riesgos asociados con el secuestro de sesiones. En general, si tiene una necesidad real de asegurarse de que la sesión sea realmente propiedad del usuario correcto, agregaría verificaciones adicionales, como el nombre de usuario y la contraseña, etc.

El EFF ha estado haciendo un poco de trabajo sobre cómo hacer huellas digitales en el navegador para rastrear a las personas. Es posible que este trabajo le proporcione algunas ideas / sugerencias sobre cómo podría aumentar sus técnicas de toma de huellas dactilares.

Consulte PanoptiClick

    
respondido por el Tim X 14.08.2015 - 01:01
fuente

Lea otras preguntas en las etiquetas