Consiglio per script di login in AJAX / PHP più sicuro
Sto facendo uno script in php e ajax, non ho scritto nella sessione php visto che si tratta anche di ajax.
Allora.. lo script e formato da un modulo di login che richiama una funzione ajax per trasformare la stringa in md5(), evitando di passare la password in chiaro alla funzione.
Ora, fin qui tutto ok, pero mi chiedevo, se un malintenzionato utilizza uno di quei servizi on-line che restituisce la stringa originare ( non so se mi spiego ), non sarebbe un problema?
Per evitare questo, non saprei, magari mi potrete consigliare meglio voi, avevo pensato ad un'altra richiesta ajax proprio per criptare, no un sistema di hasching come l'md5, la stringa realizzato in php, o forse, secondo voi, meglio utilizzare semplicemente il primo metodo?
Ultima modifica di sevenjeak : 28-08-2012 alle ore 19.38.41
Nota che un malintenzionato che ottenga l'hash md5 potrebbe loggarsi sul tuo sito semplicemente usando l'hash stesso —non deve neanche trovare la password originale.
Crittazione lato client non è qualcosa che puoi scrivere rapidamente, perché sarà facilmente aggirabile. A quel punto, vai di https.
Anzitutto AJAX non aumenta per nulla la sicurezza, è solo una comodità per non dover ricaricare i documenti per intero. Se vuoi aumentare di un filino la sicurezza per l'autenticazione senza usare connessioni cifrate (https) puoi procedere così: il server invia al client il normale modulo di autenticazione, con lo script necessario ad aumentare la sicurezza provvisto di un particolare seed (seme). L'autenticazione avviene normalmente se manca il supporto agli script Javascript, altrimenti quest'ultimo provvede a fare alcuni cambiamenti: si mette in ascolto per l'invio del modulo ed un attimo prima che ciò avvenga, prende la password inserita dall'utente, la concatena al seme spedito dal server ed usa su questa stringa così ottenuta una robusta funzione di hash, infine farà in modo che al server non arrivi la password in chiaro ma solamente l'hash della stringa e del seme concatenati. Il server provvedera poi a verificare se l'accesso è avvenuto in maniera corretta eseguendo le medesime operazioni: prelevare la password dal database, concatenarla al seme usato dal client (questo lo può ottenere dal client stesso, anche se è un po' meno sicuro o usare un sistema di sessioni per fare in modo di non farlo transitare più di una volta in chiaro attraverso la rete), usare la medesima funzione di hash usata dal client e infine comparare i due risultati. Se equivalgono l'accesso ha avuto successo.
Il problema di questo metodo è che il server è obbligato a mantenere in chiaro le credenziali degli utenti.
Comunque AlterVista offre il supporto alle connessioni protette.
Non ne sono sicuro, ma su internet credo di aver già trovato uno script che faccia quello che te dici, il problema e che non lo proprio capito, cercherò di vedere meglio la cosa.
Non saprei se lo script fa proprio quello che te indenti ma da quello che ho visto, quando effettuo il login, nell'header della pagina viene passato solo l'username in chiaro, il resto credo che sia la password concatenato ad altro, ma non saprei.
P.S.: Per quando riguarda le connessione protetta, tramite protocollo https, vi ringrazio a tutte e due per avermelo consigliato, pensavo che AlterVista non lo supportava, ma credo che non la userò per questo script, la userò invece per un sistema di login con un numero limitato di utenti.
Ultima modifica di sevenjeak : 29-08-2012 alle ore 09.13.32
Sì, ottiene il seme mediante una richiesta HTTP con l'oggetto XMLHttpRequest (quando il campo username viene selezionato). Poi lo usa come puoi notare in riga sessanta dello script all'indirizzo http://www.jamesdam.com/ajax_login/login_controller.js.
Dopo aver guardato meglio lo script sto provando, credo di averlo capito, sto provando a farne un'altro modificando quello che già avevo.
Solamente una domanda, se vorrei fare la stessa cosa solamente con php, per permettere il login a che non ha il supporto javascript, ovviamente non potrei vero?
Dovresti servire la pagina in modo tale che sia funzionante anche senza l'ausilio di Javascript, sara poi lo script che nel momento dell'invio modificherà le informazioni del modulo permettendo la trasmissione dell'hash e non della password. Se non si ha il supporto a Javascript, i dati verranno trasmessi in chiaro. Comunque se provi ad implementarlo usa funzioni più robuste dell'MD5, come SHA-1 (come consiglia l'autore dello script da te segnalato).
Lo script registra l'id del seed e il seed e lo salva nel db quando si verifica levento onfocus sul campo pass, e mi memorizza in delle variabile il valore e l'id dell'ultimo seed inserito, e fin qui tutto ok, quando eseguo il submit del form, che mi dovrebbe eseguire la funzione runLogin(), non mi funziona.
EDIT:
Ok.. ho risorto il problema, ora mi rimane solo da fare la pagina di login, grazie a tutte e due per l'aiuto.
Ultima modifica di sevenjeak : 31-08-2012 alle ore 11.35.14