Io conosco abbastanza bene PHP e le Session, ma non metto limite al sapere
... sono soggetto a correzioni ... :-)
Ringrazio tutti per le risposte.
Molti dettagli mi sono noti, per evitare risposte dall'ovvio al vago pongo
una domanda un pò più specifica, sul funzionamento delle sessioni stesse.
Quando in uno script php richiamo la session_start(), vengono inviate
informazioni al client? Ad esempio, viene impostato qualcosa nei cookie? O
le informazioni di sessione vengono mantenute solo sul lato server?
La SESSION lavora lato server, con il client ha poco a che vedere, o quasi.
Dalle mie conoscenze, posso dire, che quando viene inizializzata la pagina
con la funzione session_start(), questa fa si che PHP generi in una data
directory (vedi in php.ini la voce "session.save_path"), che di solito è
"/tmp" un finle che può avere un nome simile a
"sess_1m6305kgl4vd9iv65jjdtdacj4", all'interno della quale archivia tutto
l'array della variabile $_SESSION.
Premetto che ciò è relativo a come è configurato il PHP (vedasi php.ini), in
quanto le SESSION si potrebbero configurare/comportare come i COOKIE.
Perché in questo caso il client non saprebbe nulla sulla sessione, di
conseguenza
non potrebbe conoscere il nome della variabile per tentare di fare
qualcosa
(per inciso, conoscendo il nome della variabile, potrebbe fare qualcosa?).
Invece, a questo proposito, la sessione tiene traccia della connessione con
lo stesso browser.
Per esperimento:
Se con FF,IE7,Opera, o altro browser multi scheda, ti colleghi ad una data
pagina su un dato server, e dopo esserti autenticato (sempre se funzioni con
le SESSION) vieni reindirizzato su una nuova pagina, oppure la stessa pagina
cambia i contenuti (cioè scompare la maschera di login), pui provare a
copiare l'URL ed aprire una nuova scheda e incollare l'URL nella barra di
indirizzo e come di incanto (ammetto che potrebbe esserci qualche eccezione)
viene visualizzata direttamente la pagina con i contenuti, quindi senza la
richiesta di login.
Invece, ciò non accade se, anzicchè aprire una nuova scheda, apri una nuova
ssessione del browser ed in questo caso dovrebbe visualizzare la pagina di
login.
Cerco di spiegarti, com'è sia possibile? Quando si visita una data pagina
che prevede l'uso della sessione, al visitatore, viene assegnato un ID che è
relazionato alla connessione con quel dato browser. Questo ID lo puoi
visualizzare/impostare (secondo me pericoloso) con la funzione
"session_id()".
Forse sarete curiosi, quindi vi espongo il mio problema.
Voglio esporre i log di alcuni programmi in esecuzione sulla macchina (log
del web server, email, ecc).
Faccio questo tramite uno script (quello nascosto che cerca la variabile
$_SESSION['pippo']) installato su un dominio con SSL.
In un'altra pagina, sempre ssl, si deve inserire la password. La sola
conoscenza della password non permette quindi di accedere ai dati, bisogna
pure conoscere il nome della pagina di quel giorno (in particolare è l'MD5
della data con in coda una certa stringa).
In effetti la mia pratica non è security through obscurity "pura", giusto?
Visto che non conoscere la password non permette di accedere alla pagina
nascosta, poiché se non è presente la variabile di sessione viene
presentato un errore 404.
In questo caso, secondo me (ovviamente accetto critiche) chi vorrebbe
accedere alla pagina, dovrebbe conoscere l'ID della SESSIONE (ed è alquanto
improbabile) sempre che qualcuno si sia già autenticato, in quanto le
variabili di sessioni "scadono", o meglio non sono più consultabili dopo
alcuni minuti (vedi php.ini).
Ti dicevo, quindi, supponendo che un intruso conosca l'ID della tua sessione
attiva al momento (cioè qualcuno da un'altra postazione si sia già
autenticato), e che possa impostare all'interno dello script l'ID alla
sessione (assurdo anche a pensarlo, salvo che tu non passi l'ID come
variabile GET o POST e lo imposti sempre con "session_id") non potrai
accedere all'array $_SESSION e quindi alle sue variabili, e di conseguenza a
tutto il resto.
--
Amedeo Viscido
Responsabile IT e sviluppo software
Valentino
P.S.: se sono incomprensivo è perchè ho scritto di getto ...
________________________________________________________
http://www.sikurezza.org - Italian Security Mailing List