Hashing dell'identificazione della sessione - Come renderlo più sicuro e robusto

4

Ho scritto una classe PHP che gestisce Session e li memorizza in DB invece dei normali File nel server, lo puoi trovare su My Session Handler Class

In quel post un utente per nome @AnotherGuy ha sollevato alcuni problemi / problemi di sicurezza riguardo al mio Session Fingerprinting methods , che mi sembra valido, e lo cito qui sotto:

Now to the last thing I will talk about. As said in the start I am no security expert, but I feel like your fingerprint solution is fishy. Imagine two different people from the same company using your site. The company uses a load balancer, which makes their IP address the same. If all company's browsers/clients are the same your fingerprint for these two people would be identical. Even though you are checking HTTP_X_FORWARDED_FOR headers you cannot rely on load balancers to send the header. I cannot tell you how to properly detect sessions using the fingerprint idea.

Si riferiva alle funzioni 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;
    }

Sto usando getFingerPrint() per generare un hash di sessione utilizzando l'agente utente + sale + indirizzo IP e _isSuspicious() per controllare l'impronta digitale generata di nuovo contro l'impronta digitale memorizzata nel Database. Sembra che affronti il rischio di sicurezza fino alla stessa misura , ma quando gli utenti si trovano nella rete locale (LAN, ecc.) e utilizzano anche gli stessi agenti browser, sembrano essere fattibili al rischio di sicurezza di session hijacking .

Inoltre sto usando la funzione qui sotto per ottenere l'indirizzo IP dell'utente,

/**
     * [_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;
    }

Ora, come posso rendere questo hashing di sessione più solido quando gli utenti condividono lo stesso pool di reti. La prima soluzione che mi viene in mente è l'aggiunta di un COOKIE (sale saltuario / numero ecc.) All'hashing che sarà particolare per il sistema specifico dell'utente e nonostante abbia lo stesso agente utente e amp; indirizzo IP due utenti avranno cookie locali differenti. Chiunque ha altre soluzioni / opzioni migliori o un modo completamente diverso per gestire questa situazione?

Modifica 2: E riguardo all'uso di EVERCOOKIE [ma cosa succede se javascript è disabilitato? ]!

    
posta Dimag Kharab 12.08.2015 - 07:15
fonte

1 risposta

1

Molto dipende da cosa sta provando a fare e da quali rischi sono associati al dirottamento di sessione. In generale, se hai la reale necessità di garantire che la sessione sia effettivamente di proprietà dell'utente giusto, devi aggiungere ulteriori verifiche, come nome utente e password ecc.

Il FEP sta facendo un po 'di lavoro su come si può fare il fingerprinting del browser per tenere traccia delle persone. È possibile che questo lavoro ti fornisca alcune idee / indicazioni su come potresti aumentare le tue tecniche di impronta digitale.

Vedi PanoptiClick

    
risposta data 14.08.2015 - 01:01
fonte

Leggi altre domande sui tag