Le sessioni sono significativamente più sicure rispetto, ad esempio, ai cookie. Ma è ancora possibile rubare una sessione e quindi l'hacker avrà accesso a tutto ciò che è in quella sessione. Alcuni modi per evitarlo sono IP Checking (che funziona piuttosto bene, ma è molto basso fi e quindi non affidabile da solo), e usa un nonce. In genere con un nonce, si dispone di un "token" per pagina in modo che ogni pagina controlli che il nonce dell'ultima pagina corrisponda a ciò che ha memorizzato.
In entrambi i controlli di sicurezza, c'è una perdita di usabilità. Se fate il controllo IP e l'utente è dietro un firewall Intranet (o qualsiasi altra situazione che causa questo), che non detiene una costante IP per l'utente, dovranno ri-autenticarsi ogni volta che perdono la loro IP. Con un nonce, si ottiene sempre la situazione "Facendo clic indietro causerà la rottura di questa pagina".
Ma con un cookie, un hacker può rubare la sessione semplicemente utilizzando tecniche XSS piuttosto semplici. Se si memorizza l'ID sessione dell'utente come cookie, anche questo è vulnerabile. Quindi, anche se la sessione è solo penetrabile a qualcuno che può fare un hack a livello di server (che richiede metodi molto più sofisticati e di solito una certa quantità di privilegi, se il tuo server è sicuro), hai ancora bisogno di un ulteriore livello di verifica su ogni richiesta di script. Non dovresti usare i cookie e AJAX insieme, poiché questo rende un po 'più facile andare in città se quel cookie viene rubato, poiché le tue richieste di ajax potrebbero non ottenere i controlli di sicurezza su ogni richiesta. Ad esempio, se la pagina utilizza un nonce, ma la pagina non viene mai ricaricata, lo script può verificare solo la corrispondenza. E se il cookie è in possesso del metodo di autenticazione, ora posso andare in città a fare la mia cattiveria usando il cookie rubato e il buco AJAX.
Si noti che PHP memorizza l'ID di sessione come cookie. –
+1 Potresti spiegare di più su un nonce? link possibile? – Petrogad
L'articolo wiki su nonce è piuttosto leggero, ma ha link decenti: http://en.wikipedia.org/wiki/Cryptographic_nonce l'idea di base, a quanto ho capito, è come un token, ma può essere usata solo una volta (numero usato una volta). Ogni richiesta di pagina controlla l'ultimo nonce e ne crea uno nuovo. Quindi se provo un attacco di forza bruta sulla tua password, ottengo uno sparo, poiché il nonce non combacerà nel round 2. Se rubo la sessione e il nonce di quella pagina, potrei continuare a fare richieste e rinnovare il nonce fino a quando fai una richiesta che butta fuori la partita nonce. Perché vedrebbe la mia richiesta e il mio nonce, aggiornare ... – Anthony