Esiste un modo sicuro per condividere sessioni nello stesso server con sottodomini diversi?

1

Sto studiando un caso in cui ho un backend RESTful (basato su php) e un front-end PHP HTML + JS + ibrido in diversi sottodomini:

backend.example.com  <-- A RESTful API to provide some XHR requests.
*.example.com  <--  Any other domains on the same server that use the same PHP Session.

Un modo per avviare una sessione persistente in PHP senza il posizionamento di un cookie di sessione è creare il proprio ID di sessione e impostarlo utilizzando la funzione session_id ().

Disattivare la memorizzazione dei cookie di sessione, infatti, non mi consente di mantenere la sessione tra sottodomini. Quindi ho implementato una classe Session Manager, per controllare il ciclo di vita di tutte le mie classi e per consentire la condivisione della sessione tra sottodomini:

   public static function sessionStart($name, $limit, $trusttoken){

            (...)

    $userip = $_SERVER['REMOTE_ADDR'];
    $userbrowseragent = $_SERVER['HTTP_USER_AGENT'];

    $id = md5($userip . $salt .  $userbrowseragent  . $sessionname); //Creating unique ID

    session_id($id);                
    session_start();

            (...)
   }

È un modo sicuro per condividere sessioni nello stesso server ma utilizzando diversi sottodomini?

Nota

  • Le sessioni verranno lette solo sul lato server (file PHP)
  • Non mi interessa fidarsi delle richieste XHR.
  • Evito di esporre l'ID di sessione nelle richieste.
  • Non è possibile utilizzare SSL.
posta LeonanCarvalho 30.10.2014 - 20:41
fonte

1 risposta

2

Un'applicazione dovrebbe fare affidamento sul gestore di sessione della piattaforma. Il rollare il tuo gestore di sessione è pericoloso.

Un cookie può essere associato al dominio padre e utilizzato da ogni sottodominio. In PHP ciò può essere fatto con session_set_cookie_params () per cambiare l'ambito del dominio a *.example.com . Quindi usa session_start() normalmente.

XSS su qualsiasi sottodominio può compromettere l'ID della sessione. Assicurati di abilitare i flag dei cookie Secure e HTTPOnly . Ciò garantirà che HTTPS venga utilizzato con l'ID di sessione per tutte le richieste e limita l'impatto di XSS.

Inoltre, generare un ID di sessione utilizzando il seguente metodo non è sicuro :

$id = md5($userip . $salt .  $userbrowseragent  . $sessionname);

Non tentare mai di lanciare il proprio generatore di numeri casuali. Un id di sessione deve essere un nonce crittografico generato con un generatore di numeri pseudo-casuali crittograficamente sicuro (CSPRNG). La funzione di hash md5 non deve mai essere utilizzata in un contesto di sicurezza, è stata interrotta dal 2005. Anche se è stata utilizzata una funzione di hash sicura, l'hacker conoscerà il $userip , $userbrowseragent e il $sessionname , che significa che potrebbero eseguire la bruteforce del valore $salt offline.

    
risposta data 30.10.2014 - 20:50
fonte

Leggi altre domande sui tag