Puoi fare una crittografia lato client e server [duplicato]

0

Sto creando un sito Web PHP in cui gli utenti, tra le altre cose, possono accedere e fare cose amministrative. Per le loro password io uso password_hash ($ password) e successivamente verificare con esso, io uso password_verify ($ password, $ pass_from_db).

Poiché PHP è un linguaggio lato server, la password, prima di raggiungere il server, in entrambi i casi è vulnerabile per lo sniffing, e dal momento che è un testo chiaro, facile da usare e utilizzare da attacchi man-in-the-middle. Dato che userò Ajax JS, ho pensato di utilizzare prima una crittografia JavaScript, quindi inviare il valore crittografato di JavaScript su Internet e quindi creare l'hash della password sul valore crittografato come segue:

HTML | password=" 1234 " | - > JS | encrypt (" 1234 ")=" ASU'2j3) k " | - > PHP | password_hash (" ASU'2j3) k ")=" AlD23J" # sC5 "P " | - > Inserito in db

HTML | password=" 1234 " | - > JS | encrypt (" 1234 ")=" ASU'2j3) k " | - > PHP | password_verify (" ASU'2j3) k ", " AlD23J" # sC5 "P " - 'Ottenuto da db') | ACCETTATO

Questa è una buona idea, o dovrei semplicemente inviare la password come testo in chiaro?

    
posta Tayler 31.10.2015 - 16:25
fonte

1 risposta

3

Puoi, ma non dovresti. Non aumenta la sicurezza, dal momento che la password crittografata lato client diventa il punto di attacco.

L'altro problema con la crittografia lato client è che se non si utilizza un canale crittografato per consegnare il codice, non c'è modo di impedire che venga manomesso durante il percorso - un utente malintenzionato potrebbe semplicemente modificarlo per inviare il raw password per loro e quella crittografata.

La best practice per questa situazione è utilizzare un canale crittografato per inviare i dettagli di autenticazione: https, in altre parole. Ciò garantisce che solo il tuo server possa leggere la password e quindi puoi controllarla nel tuo codice lato server.

    
risposta data 31.10.2015 - 16:48
fonte

Leggi altre domande sui tag