2012-04-15 13 views
17

Sono principalmente un programmatore C++, ma sto cercando di raccogliere qualche PHP.Quanto sono sicure le sessioni PHP?

A quanto pare il modo di implementare le sessioni utente web è quello di memorizzare ID di accesso dell'utente in un cookie utilizzando la variabile $ _SESSION.

Non è possibile che qualcuno di modificare solo il loro biscotto, per dare loro diversi privilegi o accedere come un altro utente?

Sembra che questo meccanismo di autenticazione è solo avere l'archivio utente il proprio ID in un file - e poi semplicemente confidando di non cambiarlo.

C'è qualcosa che impedisce questo?

Grazie!

+1

ci sono libri interi su questo argomento. –

+1

http://phpsec.org/projects/guide/4.html, http://stackoverflow.com/questions/3641958/secure-sessions-cookies-in-php, http://stackoverflow.com/questions/5608764/scopo-di-php-sessioni-e-cookie-e-loro-differenze, http://stackoverflow.com/questions/4110986/new-to-php-logins-and-sessions-is-this-safe-enough , http://stackoverflow.com/questions/1181105/how-safe-are-php-session-variables – bostaf

+1

Possibile duplicato di [Quanto sono sicure le variabili di sessione PHP?] (http://stackoverflow.com/questions/1181105/ how-safe-are-php-session-variables) –

risposta

8

No, una sessione viene memorizzato sul server e non è possibile accedere da parte dell'utente. Viene utilizzato per archiviare le informazioni attraverso il sito come le sessioni di accesso.

Ecco un esempio di utilizzo:

<?php 
session_start(); 
if ($_POST['password'] == "1234") 
$_SESSION['auth'] = true; 
?> 

La sessione Si può accedere attraverso il sito per verificare se l'utente è stato autenticato.

<?php 
session_start(); 
if ($_SESSION['auth'] == true) { 
    echo "You are logged in!"; 
} 
?> 

L'utente non può modificare questi valori però ID della sessione è memorizzato su un computer tramite un cookie come una lunga stringa casuale. Se un utente non autorizzato ottiene l'accesso a queste stringhe è possibile per loro accedere al sito.

+0

Quindi i dati di sessione sono memorizzati sul server. Ecco dove stavo andando storto .. Grazie a – James

+3

@James, le * informazioni sulla sessione * non sono memorizzate pubblicamente, ma l'* ID di sessione * ** è **. Vi sono ulteriori precauzioni da adottare per evitare che ciò accada. Vedi la mia risposta. – 0b10011

+0

Entrambi ora puoi capirlo meglio grazie al suo ott 2016, e la domanda è stata posta e attiva quasi 4 anni fa da oggi. Quello che voglio dire è che questa risposta è diversa dall'aspetto sicurezza. – MNR

3

Se fare questo:

$_SESSION['user'] = $username; 

Poi $username non verranno memorizzati direttamente in un cookie. Invece un ID di sessione univoco verrà generato e memorizzato all'interno di un cookie.

le informazioni che si memorizzano in $_SESSION viene memorizzato solo lato server e mai inviato al client. Su richiesta successiva da parte del client, il server carica i dati della sessione dall'ID memorizzato nel cookie quando si esegue session_start().

È relativamente sicuro. L'unica cosa che può succedere è che qualcuno potrebbe intercettare l'id della sessione e quindi rubare la sessione degli utenti reali. HTTPS può impedire che ciò accada però.

+0

In realtà, HTTPS rende impossibile leggere il Cookie non appena viene inviato all'utente. Tuttavia, se in qualche modo l'autore dell'attacco ottiene il valore della sessione, ottiene l'accesso. – 0b10011

5

Rispondere a questa domanda ha bisogno di 2 approcci: ID di sessione

  1. PHP sono abbastanza difficile da indovinare per la maggior parte dei casi d'uso. Non molto più duro o meno duro di altri sistemi ampiamente usati.

  2. L'attendibilità di un cookie di sessione (e solo l'esistenza di un cookie di sessione) non sembra andare molto lontano dal punto di vista della sicurezza, a prescindere da dove provenga questo cookie di sessione - PHP o altrove.

Quindi, in breve: le sessioni PHP sono sicure, come il loro uso li fa essere. Questo è vero per qualsiasi sistema basato su cookie di sessione che io conosca.

24

sessioni PHP sono sicuro solo come applicazione li fa.Le sessioni PHP forniranno all'utente una stringa pseudocasuale ("ID di sessione") con la quale identificarsi, ma se tale stringa viene intercettata da un utente malintenzionato, l'utente malintenzionato può fingere di essere quell'utente.

Cosa fare

Questa informazione è tratta da "Session Management Basics" in the PHP manual, ma un po 'semplificato. Alcune cose potrebbero essere state perse. Assicurati di leggere anche quello.

  1. Always use HTTPS

    • Impedisce aggressori dalla lettura del cookie ID di sessione
  2. Enable session.use_strict_mode:

  3. Attiva sessions.use_only_cookies e disattivare session.use_trans_sid

    • Evita utente sessione di condivisione ID accidentalmente attraverso la condivisione un URL con l'ID di sessione in esso
    • Impedisce l'ID di sessione di apparire in un colpo di testa Referer
  4. Periodicamente regenerate the session ID e invalidate old session IDs shortly after regenerating

    • Se un utente malintenzionato utilizza ID di sessione di un altro utente, rigenerante invalida sia la sessione dell'attaccante, a seconda di quale utente o fa la richiesta che rigenera l'ID. È quindi possibile tracciare quando qualcuno tenta di utilizzare una sessione che è già stata rigenerata e invalidare la sessione rigenerata in quel punto. L'utente sarà in grado di accedere, ma l'attaccante (si spera) non sarà in grado di.
  5. tenere Opzionalmente traccia delle informazioni aggiuntive in $_SESSION che si riferisce alla richiesta (indirizzo IP, stringa user agent, ecc)

    • Se un attaccante guadagna in qualche modo l'accesso a un ID di sessione, questo può eventualmente rilevare l'intrusione prima che l'utente malintenzionato possa accedere a qualsiasi dato. Tuttavia, tieni presente che ciò potrebbe peggiorare l'esperienza dell'utente. Ad esempio, l'indirizzo IP può cambiare quando l'utente passa da una rete mobile a Wi-Fi e la stringa dell'agente utente può cambiare quando il browser viene aggiornato automaticamente. Regola i dati controllati in base ai compromessi che il tuo sito è disposto a gestire.
+0

Ottima risposta, ma come detto su [un'altra domanda] (https://stackoverflow.com/questions/1181105/how-safe-are-php-session-variables) * (risposta accettata, 3 ° paragrafo) *, ci può essere un problema di usabilità con il metodo * IP tracking *, giusto? – AymDev

+2

@AymDev Sfortunatamente, sì. L'IP potrebbe cambiare a causa del passaggio da LTE a WiFi. La versione del browser potrebbe cambiare con un aggiornamento automatico. Ho aggiornato la risposta con una nota al riguardo e ho aggiunto alcune raccomandazioni aggiuntive (e migliori) per proteggere le sessioni PHP. – 0b10011

1

Qualunque sia la risposta che si ottiene su questo argomento si è molto probabilmente non sta per essere soddisfatti, perché ci sono così tante opinioni diverse sul tema. Ci sono anche interi libri scritti sulle sessioni e sulla sicurezza di PHP in generale.

La risposta migliore che puoi sperare di ottenere qui è probabilmente "le sessioni sono sicure come vuoi che siano". Più lavoro e un numero maggiore di precauzioni renderanno ovviamente più sicuri da usare, ma l'implementazione stessa consumerà più tempo. Come con tutto ciò che sei tu per misurare quanta sicurezza è abbastanza sicura per le tue esigenze.

0

Dato che si è un programmatore C++, è sufficiente sapere che la sessione visibile sul lato client è solo un puntatore su un diverso spazio indirizzo (il server) e, pertanto, la sessione non è accessibile dalla modalità client .

Problemi correlati