Κατανόηση των απαιτήσεων
* 6 και 10 χαρακτήρες: Αυτό σημαίνει ότι το μήκος του κωδικού πρόσβασης πρέπει να είναι * μεταξύ * 6 και 10 χαρακτήρων, χωρίς αποκλεισμούς. Έτσι, 6, 7, 8, 9 ή 10 χαρακτήρες είναι έγκυρα μήκη.
* αλφαριθμητικό: Αυτό σημαίνει ότι ο κωδικός πρόσβασης μπορεί να περιέχει μόνο γράμματα (A-Z, A-Z) και αριθμούς (0-9). Δεν επιτρέπονται ειδικοί χαρακτήρες (όπως!, @, #, $, %, Κλπ.).
Κανονική έκφραση (regex) για επικύρωση
Μια κανονική έκφραση είναι ένας ισχυρός τρόπος για να ορίσετε ένα μοτίβο για το κείμενο. Εδώ είναι ένα regex που ταιριάζει με τις απαιτήσεις σας:
`` regex
^[a-za-z0-9] {6,10} $
`` `
Επεξήγηση του Regex:
* `^`:Ταιριάζει με την αρχή της συμβολοσειράς.
* `[a-za-z0-9]`:ταιριάζει με κάθε κεφαλαίο γράμμα (a-z), πεζά γράμμα (a-z) ή ψηφίο (0-9).
* `{6,10}`:ταιριάζει με τον προηγούμενο χαρακτήρα (τον αλφαριθμητικό χαρακτήρα) μεταξύ 6 και 10 φορές (χωρίς αποκλεισμούς).
* `$`:Ταιριάζει με το τέλος της συμβολοσειράς.
Παράδειγμα κώδικα (javascript)
`` `javascript
Λειτουργία IsValidPassword (κωδικός πρόσβασης) {
const regex =/^[a-za-z0-9] {6,10} $ /;
επιστροφή regex.test (κωδικός πρόσβασης);
}
// Παραδείγματα
console.log (isValidPassWord ("p@ssword")); // false (ειδικός χαρακτήρας)
console.log (isValidPassWord ("pass1")); // false (πολύ σύντομο)
console.log (isValidPassWord ("password12345")); // FALSE (πάρα πολύ)
console.log (isValidPassWord ("pass12")); // αλήθεια
console.log (isValidPassWord ("password12")); // αλήθεια
console.log (isValidPassWord ("p12345678")); // αλήθεια
console.log (isValidPassWord ("κωδικός πρόσβασης")); // αλήθεια
`` `
Επεξήγηση του κώδικα JavaScript:
1. Αυτή η λειτουργία λαμβάνει τη συμβολοσειρά κωδικού πρόσβασης ως είσοδο.
2. `const regex =/^[a-za-z0-9] {6,10} $/;`:Αυτή η γραμμή ορίζει την κανονική έκφραση (όπως εξηγείται παραπάνω).
3. `return regex.test (κωδικός πρόσβασης);`: Αυτή είναι η βασική γραμμή. Η μέθοδος `regex.test (κωδικός πρόσβασης)` ελέγχει αν η συμβολοσειρά `password` ταιριάζει με το μοτίβο` regex`. Επιστρέφει `true` αν ταιριάζει, και` ψεύτικο αλλιώς.
Άλλες σκέψεις και βέλτιστες πρακτικές
* Ασφάλεια: Ενώ αυτό επιβάλλει τις βασικές απαιτήσεις, συνιστάται συχνά να προσθέσετε περισσότερη πολυπλοκότητα στους κωδικούς πρόσβασης για καλύτερη ασφάλεια. Σκεφτείτε να απαιτήσετε τουλάχιστον ένα κεφαλαίο γράμμα, ένα πεζά γράμμα και έναν αριθμό.
* μηνύματα σφάλματος: Παρέχετε σαφή και χρήσιμα μηνύματα σφάλματος στον χρήστη εάν ο κωδικός πρόσβασής του δεν πληροί τις απαιτήσεις. Για παράδειγμα:
* "Ο κωδικός πρόσβασης πρέπει να είναι μεταξύ 6 και 10 χαρακτήρων."
* "Ο κωδικός πρόσβασης πρέπει να περιέχει μόνο γράμματα και αριθμούς."
* hashing: * Ποτέ* αποθηκεύστε τους κωδικούς πρόσβασης σε απλό κείμενο. Πάντα να τους χρησιμοποιούν έναν ισχυρό αλγόριθμο κατακερματισμού (όπως το BCrypt, το Argon2 ή το Scrypt) πριν την αποθηκεύσετε στη βάση δεδομένων σας. Αυτό προστατεύει τους κωδικούς πρόσβασης ακόμη και αν η βάση δεδομένων σας παραβιαστεί.
* Salting: Χρησιμοποιείτε πάντα ένα μοναδικό, τυχαία παραγόμενο αλάτι για κάθε κωδικό πρόσβασης πριν από το hashing. Αυτό καθιστά πολύ πιο δύσκολο για τους επιτιθέμενους να χρησιμοποιούν προ-υπολογισμένους πίνακες κοινών hashes κωδικού πρόσβασης (πίνακες ουράνιου τόξου).
* μετρητές αντοχής κωδικού πρόσβασης: Εξετάστε τη χρήση ενός μετρητή αντοχής κωδικού πρόσβασης για να δώσετε ανατροφοδότηση από τους χρήστες σχετικά με το πόσο ασφαλές είναι ο επιλεγμένος κωδικός πρόσβασης. Οι βιβλιοθήκες είναι διαθέσιμες για πολλές γλώσσες προγραμματισμού.
Τροποποιημένο JavaScript με ισχυρότερες συστάσεις (πιο ασφαλές)
Αυτό το παράδειγμα περιλαμβάνει ένα πιο περίπλοκο regex και τις αρχές μιας καλύτερης διαδικασίας δημιουργίας και αποθήκευσης κωδικού πρόσβασης. Σημειώστε ότι για ένα πραγματικό σύστημα, θα χρησιμοποιούσατε μια γλώσσα * από την πλευρά του διακομιστή * για το hashing και το Salting, όχι το JavaScript από την πλευρά του πελάτη. Αυτό είναι μόνο για απεικόνιση.
`` `javascript
Λειτουργία IsValidStrongPassword (κωδικός πρόσβασης) {
// απαιτεί 6-10 χαρακτήρες, τουλάχιστον ένα κεφαλαίο, μία πεζά, έναν αριθμό
const regex =/^(?=.* στρώμα +-z])(?=.** +-z..)(?=.**\d)
επιστροφή regex.test (κωδικός πρόσβασης);
}
// Επιδείξτε το hashing κωδικού πρόσβασης (μην κάνετε ποτέ αυτή την πλευρά του πελάτη σε πραγματικό κώδικα!)
Λειτουργία hashpassword (κωδικός πρόσβασης, αλάτι) {
// Σε πραγματική εφαρμογή, χρησιμοποιήστε μια γλώσσα πλευρικής διακομιστή (node.js, python, php κ.λπ.)
// με μια βιβλιοθήκη BCrypt/Argon2/Scrypt για την εκτέλεση του κατάλληλου κατακερματισμού και του αλατιού
// Προειδοποίηση:Το BTOA και το TextEncoder της Javascript δεν προορίζονται για ασφαλή κωδικό πρόσβασης!
// Αυτό είναι μόνο για επεξηγηματικό παράδειγμα.
const saltedpassword =αλάτι + κωδικός πρόσβασης; // αλάτι τον κωδικό πρόσβασης
const encodedPassWord =νέο κείμενο ().
const hashbuffer =array.from (encodedPassword)
.map (byte => byte.toString (16) .padstart (2, '0')) // Μετατροπή σε hex string
.ενώνω('');
επιστροφή hashbuffer;
}
Λειτουργία GeneratesAlt () {
// Σε πραγματική εφαρμογή, χρησιμοποιήστε ένα csprng για να δημιουργήσετε μια μακρά τυχαία συμβολοσειρά.
επιστροφή math.random ().
}
// Παραδείγματα ισχυρότερων κωδικών πρόσβασης
console.log (isValidStrongPassWord ("p@ssword")); // false (ειδικός χαρακτήρας)
console.log (isValidStrongPassWord ("pass1")); // false (πολύ σύντομο)
console.log (isValidStrongPassWord ("password12345")); // FALSE (πάρα πολύ)
console.log (isValidStrongPassWord ("pass12")); // false (λείπει κεφαλαία)
console.log (isValidStrongPassWord ("password12")); // αλήθεια
console.log (isValidStrongPassWord ("p12345678")); // FALSE (λείπει πεζά)
console.log (isValidStrongPassWord ("κωδικός πρόσβασης")); // FALSE (λείπει κεφαλαία και αριθμός)
console.log (isValidStrongPassWord ("p@ssword12")); // false (ειδικός χαρακτήρας)
// Επίδειξη "Hashing" (πολύ ανασφαλές παράδειγμα)
const password ="mySecretPassWord123";
const αλάτι =generatesAlt ();
const hashedPassword =hashpassword (κωδικός πρόσβασης, αλάτι);
console.log ("κωδικός πρόσβασης PlainText:", κωδικός πρόσβασης);
console.log ("αλάτι:", αλάτι);
console.log ("insecure \" hashed \ "κωδικός πρόσβασης:", hashedPassword);
`` `
Βασικές βελτιώσεις στο "ισχυρότερο" παράδειγμα:
* Ισχυρή regex:
* `(? =.* [a-z])`:θετικός ισχυρισμός lookahead που απαιτεί τουλάχιστον ένα πεζά γράμμα.
* `(? =.* [A-z])`:θετικός ισχυρισμός lookahead που απαιτεί τουλάχιστον ένα κεφαλαίο γράμμα.
* `(? =.* \ d)`:θετικός ισχυρισμός lookahead που απαιτεί τουλάχιστον ένα ψηφίο.
* ΠΡΟΕΙΔΟΠΟΙΗΣΗ ΠΡΟΕΙΔΟΠΟΙΗΣΗΣ ΠΛΗΡΟΦΟΡΙΕΣ: Ο κωδικός JavaScript περιλαμβάνει μια τεράστια προειδοποίηση. * Ποτέ* Εκτελέστε τον κωδικό πρόσβασης στο JavaScript από την πλευρά του πελάτη σε μια πραγματική εφαρμογή! Είναι εγγενώς ανασφαλής επειδή ο κώδικας είναι ορατός στον χρήστη και δεν μπορεί να προστατεύσει από διάφορες επιθέσεις. Η λειτουργία "hashing" είναι μόνο για την απόδειξη της * ιδέας * του αλάτου και του κατακερματισμού. Δεν είναι ασφαλής εφαρμογή.
* Γενία αλατιού: Το παράδειγμα δημιουργεί ένα βασικό αλάτι. Σε ένα πραγματικό σύστημα, θα χρησιμοποιούσατε μια κρυπτογραφικά ασφαλή γεννήτρια ψευδο-τυχαίων αριθμών (CSPRNG) για να δημιουργήσετε ένα ισχυρό, απρόβλεπτο αλάτι.
Συνοπτικά, χρησιμοποιήστε το απλούστερο regex για να επικυρώσετε το μήκος και τον αλφαριθμητικό χαρακτήρα, αλλά πάντα θυμηθείτε να κατακερματίσετε και να αλάψετε τον κωδικό πρόσβασης στην πλευρά του διακομιστή με μια κρυπτογραφικά ασφαλή μέθοδο.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα