Unico token in cookie per il sito di e-commerce per memorizzare tutti i dati relativi all'utente nel DB, è sicuro?

0

Sto costruendo un sito di e-commerce usando PHP, mysql, javascript.

La mia idea è di salvare un token, ad esempio un 50 caratteri guid, in un singolo cookie, e usarlo per identificare l'utente per ogni richiesta.

Vorrei quindi salvare altri elementi come cart_id, order_id, customer_id, logged_in (bool) e expires_at in una tabella delle sessioni del database.

Probabilmente aggiornerei il token su ogni richiesta corrispondente e rinnoverei la sua scadenza.

Mi piacerebbe sapere se questo sarebbe considerato un modo sicuro per mantenere una sessione, e se generalmente è una buona idea.

Inoltre, qualsiasi altra cosa che posso fare per rendere più sicura una sessione registrata sarebbe un vantaggio. Grazie.

Modifica

Questa è la funzione che sto usando per generare il mio guid:

<?php
function guid($length) {
    $bytes = ceil($length/2);
    $guid = bin2hex(openssl_random_pseudo_bytes($bytes));
    return $guid;
}

Lo chiamo come segue:

<?php
$token = guid(50);
    
posta Marc 03.08.2017 - 16:30
fonte

3 risposte

1

Non utilizza un GUID come identificatore di sessione, i GUID possono essere crittograficamente protetti, ma non lo sono sempre. Dato che stai usando PHP, dovresti usare l'implementazione predefinita del cookie di sessione di PHP poiché utilizza un CSPRNG (a partire da 7.1, per le versioni precedenti vedi qui ).

Il dirottamento della sessione può essere evitato con:

  1. Uso di CSPRNG per evitare identificatori di sessione prevedibili
  2. Imposta il flag di sicurezza sul cookie per evitare di inviarlo tramite una connessione non crittografata
  3. Imposta il flag HttpOnly sul cookie per impedire a javascript di leggerlo

Le versioni recenti di PHP fanno # 1 per te e session_set_cookie_params ti consente di fare # 2 e # 3.

Correlati: I GUID sono sicuri per la prima volta gettoni?

    
risposta data 03.08.2017 - 16:48
fonte
1

Sì, i GUID sono buoni per una parte della gestione della sessione. Fondamentalmente tutto ciò che ti dà è una corda unica, senza collisioni, garantita per essere unica, tutto qui. Tuttavia l'intera gestione della sessione è più di questo. Alcuni requisiti per la gestione delle sessioni se si desidera eseguire il rollover: poiché il GUID sembra confuso, non significa che sia crittografato.

  1. Identificatore di sessione univoco (il tuo GUID soddisfa questo requisito).
  2. Scadenza e ripristino della sessione.
  3. prevenzione da avvelenamento da cookie
  4. Binding autenticato e senza autenticazione. controlla alcuni dei framework PHP come lo fanno, puoi iniziare con wordpress, che è probabilmente il più semplice. Puoi effettivamente prendere in prestito il loro approccio e parti di codice nella tua implementazione (sono per lo più open source).
risposta data 04.08.2017 - 04:52
fonte
0

I token persistenti sono vulnerabili al famigerato attacco "my kid did it". Va bene mantenere il carrello in questo modo, ma è necessario forzare reauthenticatipn (con un cookie di sessione temporaneo che cade quando il browser viene chiuso) per il vero punto vendita.

    
risposta data 04.08.2017 - 04:39
fonte

Leggi altre domande sui tag