Perché l'uso della password esistente è sbagliato:
* Sicurezza compromessa: Se è possibile utilizzare la vecchia password per impostarne una nuova, chiunque abbia accesso a quella capacità (ad esempio, un dipendente canaglia, un hacker che compromette il tuo sistema) può cambiare silenziosamente le password dell'utente e assumere account senza che l'utente lo sappia.
* Perdita di responsabilità: Se conosci la password di un utente, è possibile eseguire teoricamente le azioni come utente. Questo rende impossibile il revisione contabile e la responsabilità. Non puoi dimostrare che l'utente ha intrapreso l'azione, poiché avresti potuto farlo da solo.
* Principi di archiviazione password: I sistemi moderni non archiviano mai le password in chiaro. Sono *hash *e spesso *salato *. Anche se * potresti * ottenere l'hash memorizzato, utilizzandolo per impostare una nuova password sconfigge lo scopo dell'algoritmo di hashing e introduce vulnerabilità. Cercare di invertire un hash è computazionalmente difficile e potenzialmente impossibile (progettato in quel modo!), Ma dare accesso alla sicurezza della password.
Il modo corretto per reimpostare le password (anche con accesso amministrativo):
I metodi corretti prevedono l'utente che avvia il processo di ripristino o un amministratore che attiva un ripristino che * forza * l'utente a scegliere una nuova password al momento successivo.
1. Reimpostazione della password iniziata dall'utente (self-service): Questo è il metodo preferito.
* Funzione "Password dimenticata": La maggior parte dei siti Web e delle applicazioni ha un link "password dimenticata" o "reimpostazione della password".
* Verifica e -mail: L'utente fa clic sul collegamento, inserisce il proprio indirizzo e-mail (o nome utente) e il sistema invia loro un'e-mail con un link univoco e limitato a tempo a una pagina di ripristino della password.
* Domande di sicurezza/Opzioni di recupero: Meno comune, ma ancora valido:l'utente risponde alle domande di sicurezza che hanno precedentemente impostato o utilizzano un metodo di recupero predefinito (ad esempio un numero di telefono di recupero).
* Nuovo INPUT PASSWORD: L'utente fa clic sul collegamento, viene portato in una pagina in cui può inserire e confermare una nuova password. Questa nuova password viene quindi saldamente hash e memorizzata.
2. Reimposta per la password avviata dall'amministratore (forzando una modifica):
* Pannello di amministrazione/strumento di linea di comando: L'amministratore utilizza uno strumento con autorizzazioni adeguate per reimpostare il * stato * della password, non per * impostare * una nuova password direttamente.
* Flag per password Modifica: Il sistema imposta un flag sull'account dell'utente che li costringe a modificare la password la prossima volta che accedono.
* password temporanea (non consigliata): In * alcuni * casi molto specifici (e * solo * se non sono disponibili altre opzioni), un amministratore potrebbe generare una password * temporanea *. Il sistema * deve * forza l'utente per modificarlo in una nuova password immediatamente al primo accesso con la password temporanea. Questa è generalmente una cattiva pratica perché:
* Richiede la memorizzazione della password temporanea, anche brevemente.
* Gli utenti potrebbero non cambiarlo immediatamente, aumentando il rischio.
Dettagli di implementazione (variano per sistema/linguaggio):
Il codice e i passaggi esatti dipendono dalla lingua e dal framework che stai utilizzando (ad es. Python con Django, PHP con Laravel, Node.js con Express, ecc.). Ecco uno schema generale:
* Backend (lato server):
* Hashing password: Usa un forte algoritmo di hashing come bcrypt, argon2 o scrypt (non MD5 o sha1, che sono considerati rotti). Le biblioteche sono prontamente disponibili per tutte le lingue principali.
* Generazione di sale: Genera un sale unico per ogni password. Il sale è un valore casuale combinato con la password prima dell'hashing. Questo impedisce gli attacchi del tavolo arcobaleno.
* Archiviazione password: Memorizza il * hash * e * sale * nel tuo database, mai la password in chiaro.
* RESET GENERAZIONE TOKEN: Quando viene richiesto un ripristino, genera un token casuale univoco (ad esempio, un UUID) e associarlo all'utente nel database. Includi un timestamp per scadere il token dopo un certo periodo (ad es. 1 ora).
* Invio e -mail: Utilizzare una libreria o un servizio per inviare e -mail. Assicurati che le tue e -mail siano correttamente formattate e non sembrino spam.
* Convalida del token: Quando l'utente fa clic sul collegamento di ripristino, convalida il token rispetto al database, verificando che esista, non è scaduto ed è associato all'utente corretto.
* Aggiornamento della password: Dopo una convalida riuscita, consentire all'utente di inserire una nuova password, l'hash con un nuovo sale e aggiornare il database. Invalidare o eliminare il token di ripristino.
* frontend (lato client):
* Forme sicure: Utilizzare HTTPS per crittografare la comunicazione tra il browser e il server.
* Misuratore di resistenza password: Fornire un feedback visivo all'utente sulla forza della propria password.
* Campo di conferma: Richiedere all'utente di inserire due volte la nuova password per prevenire gli errori di battitura.
Esempio (Python concettuale/Django):
`` `Python
da django.contrib.auth.hashers import make_password, check_password
da django.contrib.auth.models Import User
importare uuid
Importa DateTime
def reset_password_request (email):
Tentativo:
user =user.objects.get (email =email)
reset_token =uuid.uuid4 ()
user.profile.reset_token =reset_token # Supponendo che tu abbia un modello UserProfile
user.profile.reset_token_expiry =datetime.datetime.now () + datetime.timedelta (ore =1)
user.profile.save ()
# Invia e -mail con reset_token
Send_Password_Reset_Email (user.Email, reset_token)
restituire vero
Tranne user.doesnotexist:
restituire false # o gestire l'errore in modo appropriato
DEF Verify_Reset_Token (token):
Tentativo:
user =user.objects.get (profile__reset_token =token, profilo__reset_token_expiry__gt =datetime.datetime.now ())
restituire l'utente
Tranne user.doesnotexist:
restituire nessuno
def set_new_password (utente, new_password):
user.password =make_password (new_password) # hash la nuova password
user.profile.reset_token =nessuno # invalidare il token
user.profile.reset_token_expiry =nessuno
user.profile.save ()
utente.save ()
`` `
Considerazioni sulla sicurezza chiave:
* https: Usa sempre HTTPS per crittografare la comunicazione.
* Limitazione della velocità: Implementare la limitazione della tariffa per evitare attacchi di forza bruta sull'endpoint reimpostazione della password.
* Scadenza token: Impostare un tempo di scadenza ragionevole per i token di ripristino.
* Registrazione: Registra le richieste di reimpostazione della password e i tentativi a scopo di audit.
* Audit di sicurezza regolari: Rivedi periodicamente l'implementazione di reimpostazione della password per identificare e correggere potenziali vulnerabilità.
* Principio del minimo privilegio: Concedere solo le autorizzazioni minime necessarie agli amministratori in grado di avviare reinserisci i reset della password.
In sintesi, conoscere la password esistente di un utente dovrebbe * mai * essere utilizzata per ripristinarlo. Utilizzare i metodi sicuri, avviati dall'utente o iniziati dall'amministratore (forzando la modifica dei successivi accesso) sopra descritti per proteggere gli account utente e mantenere un sistema sicuro.
Domanda © www.354353.com