Avrei bisogno di sapere come far sì che il mio programma entri in una
pagina di login, per esempio la pagina di login dell’admin di un sito,
e, che, date username e password, mi dica se il login è riuscito o
fallito. Come posso fare?
=|
puoi essere più specifico?
Usando per esempio Mechanize, non mi è chiaro come poter accedere ad
una pagina web che richieda username e password. Come faccio?
Scrivevo che “l’accesso di solito consiste nell’impostare un valore
nella
sessione”. Significa che le pagine “dopo-la-login” devono controllare
che quel valore esista e da quello leggere l’utente dal db. Per questo
spesso in sessione si memorizza l’id dell’utente nella tabella degli
utenti.
Se l’utente non è in sessione si fa una redirect alla pagina di login.
Non ho mai usato mechanize ma il principio è generale a tutti i
programmi web in tutti i linguaggi.
Nel server si devono estrarre due parametri dalla richiesta HTTP: lo
username e la password. Con quelli si fa una query nel database e se si
trova l’utente con quello username e quella password si fa accedere
l’utente. L’accesso di solito consiste nell’impostare un valore nella
sessione e i dettagli variano da come la gestisci (Rails, fai-da-te,
etc).
Fondamentale per la sicurezza è non avere le password in chiaro nel
database. Come minimo memorizzi un hash della password
2.2.3 :001 > require ‘digest’
=> true
2.2.3 :002 > Digest::SHA256.hexdigest(“una password non banale”)
=> “c3c3909a854b224ec43a2541fc8f7c7a3351b5f171b17a5cfc04e15f67ac5489”
meglio se con un salt e meglio se con bcrypt. Poi devi “cifrare” la
password proveniente dal form di login allo stesso modo e metterla a
confronto con quella nel database. Leggi
http://10pixels.net/post/how_to_encrypt_passwords_in_ruby
Nota che MD5 non si deve più usare, ormai si pensa che sarà craccato
presto. Negli esempi che fanno riferimento a MD5 sostituiscilo con
SHA256 o bcrypt.
Come vedi la memorizzazione delle password non è una questione banale.
Altro punto fondamentale per la sicurezza è la gestione sicura della
sessione, per evitare che chiunque possa fingere di essere chiunque
altro. Qui non devi assumere che gli utenti del tuo sistema siano
collaborativi, soprattutto se al loro posto sta seduto qualcuno che non
dovrebbe essere lì.
E’ per tutte queste complicazioni che di solito si preferisce usare un
sistema di autenticazione già pronto, ad esempio devise, dentro ad un
framework web che metta al sicuro la sessione, ad esempio Rails.
Qui non devi assumere che gli utenti del tuo sistema siano
collaborativi, soprattutto se al loro posto sta seduto qualcuno che non
dovrebbe essere lì.
Ma porca paletta, dott Sartorius!
Siam mica in 1984 (Orwell);
o si ?!
Mi affascina la tematica del “qualcuno che non dovrebbe essere lì”
Ma in fondo penso che se questo qualcuno fosse un robot, forse noi,
invece che stare qui, potremmo essere a prendere aria, ma questo mi
porterebbe lontano…
Tornando in topic, grazie per il link:
http://10pixels.net/post/how_to_encrypt_passwords_in_ruby
tuoi suggerimenti sempre utili.
respect
giorgio
Chi può dirlo, ma coincidenza leggevo ieri https://password-hashing.net/
con l’annuncio dell’algoritmo vincitore del concorso e raccomandato per
i prossimi anni.