Αντιμετώπιση προβλημάτων

Γνώση Υπολογιστών >> Αντιμετώπιση προβλημάτων >  >> Οι κωδικοί πρόσβασης

Πώς μπορείτε να επαναφέρετε τους κωδικούς πρόσβασης των χρηστών εάν γνωρίζετε τον τρέχοντα κωδικό πρόσβασής του;

Δεν πρέπει ποτέ Χρησιμοποιήστε τον υπάρχοντα κωδικό πρόσβασης ενός χρήστη για να τον επαναφέρετε, ακόμη και αν το γνωρίζετε. Αυτή είναι μια τεράστια ευπάθεια ασφαλείας και μια παραβίαση των βέλτιστων πρακτικών. Εδώ γιατί και πώς πρέπει * στην πραγματικότητα * επαναφέρετε τους κωδικούς πρόσβασης:

Γιατί η χρήση του υπάρχοντος κωδικού πρόσβασης είναι λάθος:

* Εμβολική ασφάλεια: Εάν μπορείτε να χρησιμοποιήσετε τον παλιό κωδικό πρόσβασης για να ορίσετε ένα νέο, όποιος αποκτήσει πρόσβαση σε αυτή τη δυνατότητα (π.χ. ένας υπάλληλος Rogue, ένας χάκερ που θέτει σε κίνδυνο το σύστημά σας) μπορεί να αλλάξει σιωπηλά τους κωδικούς πρόσβασης των χρηστών και να αναλάβει λογαριασμούς χωρίς να γνωρίζει ο χρήστης.

* Απώλεια λογοδοσίας: Εάν γνωρίζετε τον κωδικό πρόσβασης ενός χρήστη, θα μπορούσατε θεωρητικά να εκτελέσετε ενέργειες ως χρήστη. Αυτό καθιστά αδύνατο τον έλεγχο και τη λογοδοσία. Δεν μπορείτε να αποδείξετε ότι ο χρήστης πήρε τη δράση, όπως θα μπορούσατε να το κάνετε μόνοι σας.

* Αρχές αποθήκευσης κωδικού πρόσβασης: Τα σύγχρονα συστήματα δεν αποθηκεύουν ποτέ κωδικούς πρόσβασης σε plaintext. Είναι *χασμουρητό *και συχνά *αλατισμένο *. Ακόμα κι αν * θα μπορούσατε * να πάρετε το αποθηκευμένο hash, χρησιμοποιώντας το για να ρυθμίσετε έναν νέο κωδικό πρόσβασης, ο σκοπός του αλγορίθμου hashing και εισάγει τρωτά σημεία. Η προσπάθεια αντιστροφής ενός κατακερματισμού είναι υπολογιστικά δύσκολη και δυνητικά αδύνατη (σχεδιασμένη με αυτόν τον τρόπο!), Αλλά η πρόσβαση στον κωδικό πρόσβασης παρακάμπτει την ασφάλεια.

Ο σωστός τρόπος επαναφοράς κωδικών πρόσβασης (ακόμη και με πρόσβαση διαχειριστή):

Οι κατάλληλες μέθοδοι περιλαμβάνουν τον χρήστη που ξεκινά τη διαδικασία επαναφοράς ή έναν διαχειριστή που ενεργοποιεί μια επαναφορά που * αναγκάζει τον χρήστη να επιλέξει έναν νέο κωδικό πρόσβασης κατά την επόμενη σύνδεση.

1. Αυτή είναι η προτιμώμενη μέθοδος.

* "Ξεχάσατε τον κωδικό πρόσβασης": Οι περισσότεροι ιστότοποι και εφαρμογές έχουν έναν σύνδεσμο "ξεχασμένης κωδικού πρόσβασης" ή "επαναφοράς κωδικού πρόσβασης".

* Επαλήθευση email: Ο χρήστης κάνει κλικ στο σύνδεσμο, εισάγει τη διεύθυνση ηλεκτρονικού ταχυδρομείου τους (ή το όνομα χρήστη) και το σύστημα τους στέλνει ένα μήνυμα ηλεκτρονικού ταχυδρομείου με έναν μοναδικό σύνδεσμο περιορισμένου χρόνου σε μια σελίδα επαναφοράς κωδικού πρόσβασης.

* Ερωτήσεις ασφαλείας/Επιλογές ανάκτησης: Λιγότερο κοινό, αλλά εξακολουθεί να ισχύει:ο χρήστης απαντά στις ερωτήσεις ασφαλείας που εγκατέστησαν προηγουμένως ή χρησιμοποιεί μια προκαθορισμένη μέθοδο ανάκτησης (π.χ. έναν αριθμό τηλεφώνου ανάκτησης).

* Νέα είσοδος κωδικού πρόσβασης: Ο χρήστης κάνει κλικ στον σύνδεσμο, μεταφέρεται σε μια σελίδα όπου μπορούν να εισέλθουν και να επιβεβαιώσουν έναν νέο κωδικό πρόσβασης. Αυτός ο νέος κωδικός πρόσβασης είναι στη συνέχεια με ασφάλεια και αποθηκεύεται.

2. Επαναφορά κωδικού πρόσβασης που έχει εκτοξευθεί με διαχειριστή (αναγκάζοντας μια αλλαγή):

* Εργαλείο διαχείρισης/γραμμής εντολών: Ο διαχειριστής χρησιμοποιεί ένα εργαλείο με τα κατάλληλα δικαιώματα για την επαναφορά της κατάστασης * του κωδικού πρόσβασης, όχι για να * ρυθμίσει άμεσα έναν νέο κωδικό πρόσβασης.

* σημαία για αλλαγή κωδικού πρόσβασης: Το σύστημα θέτει μια σημαία στο λογαριασμό του χρήστη που τους αναγκάζει να αλλάξουν τον κωδικό πρόσβασής τους την επόμενη φορά που θα συνδεθούν.

* Προσωρινός κωδικός πρόσβασης (δεν συνιστάται): Σε κάποιες * πολύ συγκεκριμένες περιπτώσεις (και * μόνο * εάν δεν είναι διαθέσιμες άλλες επιλογές), ένας διαχειριστής μπορεί να δημιουργήσει έναν * προσωρινό * κωδικό πρόσβασης. Το σύστημα * πρέπει * δύναμη Ο χρήστης για να το αλλάξει σε έναν νέο κωδικό πρόσβασης αμέσως μετά την πρώτη σύνδεσή του με τον προσωρινό κωδικό πρόσβασης. Αυτή είναι γενικά μια κακή πρακτική, διότι:

* Απαιτεί την αποθήκευση του προσωρινού κωδικού πρόσβασης, ακόμη και για λίγο.

* Οι χρήστες μπορεί να μην το αλλάξουν αμέσως, αυξάνοντας τον κίνδυνο.

Λεπτομέρειες εφαρμογής (ποικίλλει ανάλογα με το σύστημα/γλώσσα):

Ο ακριβής κώδικας και τα βήματα εξαρτώνται από τη γλώσσα και το πλαίσιο που χρησιμοποιείτε (π.χ. Python με Django, PHP με Laravel, Node.js με Express κ.λπ.). Εδώ είναι ένα γενικό περίγραμμα:

* backend (διακομιστής):

* Κωδικός πρόσβασης: Χρησιμοποιήστε έναν ισχυρό αλγόριθμο κατακερματισμού όπως το BCrypt, το Argon2 ή το Scrypt (όχι το MD5 ή το Sha1, οι οποίοι θεωρούνται σπασμένες). Οι βιβλιοθήκες είναι άμεσα διαθέσιμες για όλες τις μεγάλες γλώσσες.

* Γενία αλατιού: Δημιουργήστε ένα μοναδικό αλάτι για κάθε κωδικό πρόσβασης. Το αλάτι είναι μια τυχαία τιμή που συνδυάζεται με τον κωδικό πρόσβασης πριν από το hashing. Αυτό αποτρέπει τις επιθέσεις του τραπεζιού ουράνιου τόξου.

* Αποθήκευση κωδικού πρόσβασης: Αποθηκεύστε το * hash * και * αλάτι * στη βάση δεδομένων σας, ποτέ ο κωδικός πρόσβασης του κλάδου.

* Επαναφορά γενιάς συμβόλων: Όταν ζητηθεί επαναφορά, δημιουργήστε ένα μοναδικό, τυχαίο διακριτικό (π.χ., ένα UUID) και συνδέστε το με τον χρήστη στη βάση δεδομένων. Συμπεριλάβετε μια χρονική σήμανση για να λήξει το διακριτικό μετά από μια συγκεκριμένη περίοδο (π.χ. 1 ώρα).

* Αποστολή email: Χρησιμοποιήστε μια βιβλιοθήκη ή μια υπηρεσία για να στείλετε μηνύματα ηλεκτρονικού ταχυδρομείου. Βεβαιωθείτε ότι τα μηνύματα ηλεκτρονικού ταχυδρομείου σας έχουν διαμορφωθεί σωστά και δεν μοιάζουν με ανεπιθύμητα μηνύματα.

* Επικύρωση συμβόλων: Όταν ο χρήστης κάνει κλικ στον σύνδεσμο επαναφοράς, επικυρώστε το διακριτικό ενάντια στη βάση δεδομένων, ελέγχοντας ότι υπάρχει, δεν έχει λήξει και συνδέεται με τον σωστό χρήστη.

* Ενημέρωση κωδικού πρόσβασης: Μετά την επιτυχή επικύρωση, επιτρέψτε στον χρήστη να εισαγάγει έναν νέο κωδικό πρόσβασης, να τον κατακερματίζει με ένα νέο αλάτι και να ενημερώσει τη βάση δεδομένων. Ακυρώστε ή διαγράψτε το διακριτικό RESET.

* frontend (πελάτης):

* Ασφαλείς φόρμες: Χρησιμοποιήστε το HTTPS για να κρυπτογραφήσετε την επικοινωνία μεταξύ του προγράμματος περιήγησης και του διακομιστή.

* Μετρητής δύναμης κωδικού πρόσβασης: Παρέχετε οπτική ανατροφοδότηση στον χρήστη σχετικά με τη δύναμη του κωδικού πρόσβασής του.

* Πεδίο επιβεβαίωσης: Απαιτήστε από τον χρήστη να εισαγάγει τον νέο κωδικό πρόσβασης δύο φορές για να αποτρέψει τα τυπογραφικά λάθη.

Παράδειγμα (εννοιολογικό python/django):

`` `Python

Από django.contrib.auth.hashers εισαγωγή make_password, check_password

Από το django.contrib.auth.models Εισαγωγή χρήστη

Εισαγωγή uuid

Εισαγωγή ημερομηνίας

def reset_password_request (email):

δοκιμή:

user =user.objects.get (Email =Email)

reset_token =uuid.uuid4 ()

user.profile.reset_token =reset_token # Υποθέτοντας ότι έχετε ένα μοντέλο χρήστηProfile

user.profile.reset_token_expiry =datetime.datetime.now () + dateTime.timedelta (ώρες =1)

user.profile.save ()

# Αποστολή email με reset_token

send_password_reset_email (user.email, reset_token)

Επιστρέψτε το TRUE

εκτός από το user.doesnotexist:

Επιστρέψτε το False # ή χειριστείτε κατάλληλα το σφάλμα

def verify_reset_token (Token):

δοκιμή:

user =user.objects.get (Profile__Reset_Token =Token, Profile__Reset_Token_Expiry__gt =datetime.datetime.now ())

Επιστροφή χρήστη

εκτός από το user.doesnotexist:

Επιστρέψτε κανένα

def set_new_password (χρήστης, new_password):

user.password =make_password (new_password) # Hash Ο νέος κωδικός πρόσβασης

user.profile.reset_token =none # Ακύρωση του διακριτικού

user.profile.reset_token_expiry =Κανένα

user.profile.save ()

user.save ()

`` `

Βασικές εκτιμήσεις ασφαλείας:

* https: Χρησιμοποιείτε πάντα HTTPS για να κρυπτογραφήσετε την επικοινωνία.

* Περιορισμός ρυθμού: Εφαρμογή περιορισμού του επιτοκίου για την πρόληψη επιθέσεων βίαιης δύναμης στο τελικό σημείο επαναφοράς του κωδικού πρόσβασης.

* Λήξη Token: Ορίστε έναν λογικό χρόνο λήξης για τα μάρκες επαναφοράς.

* Καταγραφή: Αρχείο καταγραφής κωδικών πρόσβασης αιτήματα και προσπάθειες για σκοπούς ελέγχου.

* Τακτικοί έλεγχοι ασφαλείας: Αναθεωρήστε περιοδικά την εφαρμογή επαναφοράς του κωδικού πρόσβασης για τον εντοπισμό και την επίλυση πιθανών τρωτών σημείων.

* Αρχή του ελάχιστου προνομίου: Δώστε μόνο τα ελάχιστα απαραίτητα δικαιώματα στους διαχειριστές που μπορούν να ξεκινήσουν επαναφορά κωδικών πρόσβασης.

Συνοπτικά, η γνώση του υπάρχοντος κωδικού πρόσβασης ενός χρήστη δεν πρέπει ποτέ να χρησιμοποιηθεί για την επαναφορά του. Χρησιμοποιήστε τις ασφαλείς, ξεκίνησε με χρήστες ή διαχειριστή (αναγκάζοντας την αλλαγή στην επόμενη σύνδεση) μεθόδους που περιγράφονται παραπάνω για να προστατεύσετε τους λογαριασμούς χρηστών και να διατηρήσετε ένα ασφαλές σύστημα.

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα