Sono alla ricerca di un modo per assicurarmi che l'utente che accede sia sempre lo stesso, in altre parole voglio assicurarmi che nessun altro provi a usare lo stesso ID di sessione per ereditare le credenziali di accesso.
Premessa: il livello di sicurezza che cerco è definibile come 'paranoico' per il semplice motivo che verrebbe usato in un software gestionale scritto in php e pubblicato su internet, per cui la sicurezza sarebbe un problema decisamente cruciale.
ora le alternative sono:
- tenere traccia dell'ip dell'utente nella sessione. Non accettabile, c'è troppo rischio di falsi positivi e falsi negativi (gente che naviga dietro router/proxy/proxy anonimi/TOR)
- tenere traccia dello user agent. Non accettabile. E' abbastanza facile che due persone usino lo stesso browser sullo stesso sistema operativo. E non è neanche così difficile riuscire a rilevare lo user agent di un qualunque utente (basta fargli visitare una qualunque pagina preparata ad-hoc)
- qui si dice di salvare una firma del tipo md5('user-agent'.'stringa segreta') e poi passare questa stringa tramite POST e/o tramite GET, e confrontarla con quella nella sessione.
Ma ho dei dubbi sulla efficacia, per due motivi: finchè la stringa è basata sullo user agent, sarà sempre uguale anche per altri utenti con lo stesso user agent.
Inoltre non credo sia così impossibile riuscire a "farsi mandare" e/o "carpire" questa stringa a un altro utente.
- Uso di mod_unique_id (modulo di apache)
Trattasi di un id casuale generato a ogni pagina da apache.
sarebbe bello, peccato sia senza memoria. Quindi dovrei salvarlo ogni volta nella sessione e nella pagina e confrontarlo, con il rischio che venga sgamato. D'accordo che è monouso, ma il rischio cmq c'è.
A meno che non ci sia un modo più furbo di usarlo, che al momento mi sfugge.
- invio di una qualunque stringa casuale da confrontare con quella salvata nella sessione (vedi sopra per i problemi).
Il punto è che nessuno di questi sistema mi piace, per cui vorrei trovare un modo più sicuro.
L'ideale penso sia una signature generabile ogni volta combinando gli header che arrivano dal browser, in modo che possano essere calcolati e confrontati per ogni singola pagina senza far viaggiare nessuna stringa avanti e indietro tra browser e server, ma rimane il problema che due persone con lo stesso browser generano la stessa stringa ..