
Sjekk passordstyrken med JavaScript eller jQuery og regulære uttrykk (også med eksempler på serversiden!)
Jeg forsket på å finne et godt eksempel på en passordstyrkekontroll som bruker Javascript og Vanlig uttrykk (regex). I applikasjonen på jobben min legger vi tilbake et innlegg for å bekrefte passordstyrken, og det er ganske upraktisk for brukerne våre.
Hva er Regex?
Et vanlig uttrykk er en sekvens av tegn som definerer et søkemønster. Vanligvis brukes slike mønstre av strengesøkealgoritmer for finne or Finn og erstatt operasjoner på strenger, eller for validering av inndata.
Denne artikkelen skal definitivt ikke lære deg vanlige uttrykk. Bare vet at muligheten til å bruke Regular Expressions vil absolutt forenkle utviklingen din når du søker etter mønstre i tekst. Det er også viktig å merke seg at de fleste utviklingsspråk har optimalisert bruk av vanlig uttrykk ... så i stedet for å analysere og søke i strenger trinnvis, er Regex vanligvis mye raskere både server og klientside.
Jeg søkte ganske mye på nettet før jeg fant det et eksempel av noen flotte regulære uttrykk som ser etter en kombinasjon av lengde, tegn og symboler. Koden var imidlertid litt overdreven etter min smak og skreddersydd for .NET. Så jeg forenklet koden og la den i JavaScript. Dette gjør at den validerer passordstyrken i sanntid på klientens nettleser før den publiseres tilbake ... og gir tilbakemelding til brukeren om passordets styrke.
Skriv et passord
For hvert tastetrykk testes passordet mot det vanlige uttrykket, og tilbakemelding blir gitt til brukeren i et spenn under det.
JavaScript-passordstyrkefunksjon
De Vanlig uttrykk gjør en fantastisk jobb med å minimere lengden på koden. Denne Javascript-funksjonen sjekker styrken til et passord og om det er enkelt, middels, vanskelig eller ekstremt vanskelig å gjette det. Mens personen skriver, viser den tips for å oppmuntre den til å bli sterkere. Den validerer passordet basert på:
- Lengde – Hvis lengden er under eller over 8 tegn.
- Blandet sak – Hvis passordet har både store og små bokstaver.
- Numbers – Hvis passordet inneholder tall.
- Spesielle tegn – Hvis passordet inneholder spesialtegn.
Funksjonen viser vanskelighetsgraden samt noen tips for å herde passordet ytterligere.
function checkPasswordStrength(password) {
// Initialize variables
var strength = 0;
var tips = "";
// Check password length
if (password.length < 8) {
tips += "Make the password longer. ";
} else {
strength += 1;
}
// Check for mixed case
if (password.match(/[a-z]/) && password.match(/[A-Z]/)) {
strength += 1;
} else {
tips += "Use both lowercase and uppercase letters. ";
}
// Check for numbers
if (password.match(/\d/)) {
strength += 1;
} else {
tips += "Include at least one number. ";
}
// Check for special characters
if (password.match(/[^a-zA-Z\d]/)) {
strength += 1;
} else {
tips += "Include at least one special character. ";
}
// Return results
if (strength < 2) {
return "Easy to guess. " + tips;
} else if (strength === 2) {
return "Medium difficulty. " + tips;
} else if (strength === 3) {
return "Difficult. " + tips;
} else {
return "Extremely difficult. " + tips;
}
}
Hvis du vil oppdatere fargen på spissen, kan du også gjøre det ved å oppdatere koden etter // Return results
linje.
// Get the paragraph element
var strengthElement = document.getElementById("passwordStrength");
// Return results
if (strength < 2) {
strengthElement.textContent = "Easy to guess. " + tips;
strengthElement.style.color = "red";
} else if (strength === 2) {
strengthElement.textContent = "Medium difficulty. " + tips;
strengthElement.style.color = "orange";
} else if (strength === 3) {
strengthElement.textContent = "Difficult. " + tips;
strengthElement.style.color = "black";
} else {
strengthElement.textContent = "Extremely difficult. " + tips;
strengthElement.style.color = "green";
}
jQuery passordstyrkefunksjon
Med jQuery trenger vi faktisk ikke å skrive skjemaet med en oninput-oppdatering:
<form>
<label for="password">Enter password:</label>
<input type="password" id="password">
<p id="password-strength"></p>
</form>
Vi kan også endre fargen på meldingene hvis vi ønsker det.
$(document).ready(function() {
$('#password').on('input', function() {
var password = $(this).val();
var strength = 0;
var tips = "";
// Check password length
if (password.length < 8) {
tips += "Make the password longer. ";
} else {
strength += 1;
}
// Check for mixed case
if (password.match(/[a-z]/) && password.match(/[A-Z]/)) {
strength += 1;
} else {
tips += "Use both lowercase and uppercase letters. ";
}
// Check for numbers
if (password.match(/\d/)) {
strength += 1;
} else {
tips += "Include at least one number. ";
}
// Check for special characters
if (password.match(/[^a-zA-Z\d]/)) {
strength += 1;
} else {
tips += "Include at least one special character. ";
}
// Update the text and color based on the password strength
var passwordStrengthElement = $('#password-strength');
if (strength < 2) {
passwordStrengthElement.text("Easy to guess. " + tips);
passwordStrengthElement.css('color', 'red');
} else if (strength === 2) {
passwordStrengthElement.text("Medium difficulty. " + tips);
passwordStrengthElement.css('color', 'orange');
} else if (strength === 3) {
passwordStrengthElement.text("Difficult. " + tips);
passwordStrengthElement.css('color', 'black');
} else {
passwordStrengthElement.text("Extremely difficult. " + tips);
passwordStrengthElement.css('color', 'green');
}
});
});
Forherde passordforespørselen
Det er viktig at du ikke bare validerer passordkonstruksjonen i Javascript. Dette vil gjøre det mulig for alle med nettleserutviklingsverktøy å omgå skriptet og bruke det passordet de ønsker. Du bør ALLTID bruke en sjekk på serversiden for å validere passordstyrken før du lagrer den på plattformen.
PHP-funksjon for passordstyrke
function checkPasswordStrength($password) {
// Initialize variables
$strength = 0;
// Check password length
if (strlen($password) < 8) {
return "Easy to guess";
} else {
$strength += 1;
}
// Check for mixed case
if (preg_match("/[a-z]/", $password) && preg_match("/[A-Z]/", $password)) {
$strength += 1;
}
// Check for numbers
if (preg_match("/\d/", $password)) {
$strength += 1;
}
// Check for special characters
if (preg_match("/[^a-zA-Z\d]/", $password)) {
$strength += 1;
}
// Return strength level
if ($strength < 2) {
return "Easy to guess";
} else if ($strength === 2) {
return "Medium difficulty";
} else if ($strength === 3) {
return "Difficult";
} else {
return "Extremely difficult";
}
}
Python-funksjon for passordstyrke
def check_password_strength(password):
# Initialize variables
strength = 0
# Check password length
if len(password) < 8:
return "Easy to guess"
else:
strength += 1
# Check for mixed case
if any(char.islower() for char in password) and any(char.isupper() for char in password):
strength += 1
# Check for numbers
if any(char.isdigit() for char in password):
strength += 1
# Check for special characters
if any(not char.isalnum() for char in password):
strength += 1
# Return strength level
if strength < 2:
return "Easy to guess"
elif strength == 2:
return "Medium difficulty"
elif strength == 3:
return "Difficult"
else:
return "Extremely difficult"
C#-funksjon for passordstyrke
public string CheckPasswordStrength(string password) {
// Initialize variables
int strength = 0;
// Check password length
if (password.Length < 8) {
return "Easy to guess";
} else {
strength += 1;
}
// Check for mixed case
if (password.Any(char.IsLower) && password.Any(char.IsUpper)) {
strength += 1;
}
// Check for numbers
if (password.Any(char.IsDigit)) {
strength += 1;
}
// Check for special characters
if (password.Any(ch => !char.IsLetterOrDigit(ch))) {
strength += 1;
}
// Return strength level
if (strength < 2) {
return "Easy to guess";
} else if (strength == 2) {
return "Medium difficulty";
} else if (strength == 3) {
return "Difficult";
} else {
return "Extremely difficult";
}
}
Java-funksjon for passordstyrke
public String checkPasswordStrength(String password) {
// Initialize variables
int strength = 0;
// Check password length
if (password.length() < 8) {
return "Easy to guess";
} else {
strength += 1;
}
// Check for mixed case
if (password.matches(".*[a-z].*") && password.matches(".*[A-Z].*")) {
strength += 1;
}
// Check for numbers
if (password.matches(".*\\d.*")) {
strength += 1;
}
// Check for special characters
if (password.matches(".*[^a-zA-Z\\d].*")) {
strength += 1;
}
// Return strength level
if (strength < 2) {
return "Easy to guess";
} else if (strength == 2) {
return "Medium difficulty";
} else if (strength == 3) {
return "Difficult";
} else {
return "Extremely difficult";
}
}
Og hvis du bare leter etter en flott passordgenerator, har jeg bygget et fint lite nettverktøy for det.
Jeg fant en annen kontroll av passordstyrke. Algoritmen deres er basert på ordbok. Prøv en på microsoft.com – http://www.microsoft.com/protect/yourself/password/checker.mspx og en på itsimpl.com – http://www.itsimpl.com
TAKK SKAL DU HA! TAKK SKAL DU HA! TAKK SKAL DU HA! Jeg har tullet rundt i 2 uker med en jævla passordstyrkekode fra andre nettsider og trukket ut håret mitt. Din er kort, fungerer akkurat som jeg vil, og best av alt, lett for en javascript-nybegynner å endre! Jeg ønsket å fange styrkedommen og ikke la skjemaet legge ut for å faktisk oppdatere brukerens passord med mindre det oppfylte styrketesten. Andres kode var for komplisert eller fungerte ikke riktig eller noe annet. Jeg elsker deg! XXXXXX
Værsågod! Værsågod! Værsågod!
Jeg elsker deg også!
Takk for at du skrev et stykke kode som gjør akkurat det som står på boksen!
Hei, først og fremst tusen takk for innsatsen, jeg prøvde å bruke dette med Asp.net men fungerte ikke, jeg bruker
i stedet for tag, og det fungerte ikke, noen forslag?!
Til Nisreen: koden i den uthevede boksen fungerer ikke med en cut'n'paste. Enkeltsitatet er rotet til. Koden til demonstrasjonslenken er imidlertid fin.
Hei, jeg liker manuset ditt! Jeg oversatte den til nederlandsk, og la den ut på forumet mitt her!
flott jobb! nøyaktig hvordan det skal gjøres på klienten
veldig bra jobb....
Takk Douglas, jeg bruker den til min nåværende jobb.
"P@s$w0rD" viser sterkt, selv om det ville bli knekt ganske raskt med et ordbokangrep...
For å distribuere en slik funksjon på en profesjonell løsning, tror jeg det er viktig å kombinere denne algoritmen med en ordboksjekk.
Fungerer bra i XULRunner med litt endring rundt. Takk!
Takk for denne lille koden, jeg kan nå bruke den til å teste passordstyrken min når de besøkende skriver inn passordene sine,
Flott stykke koding
Manuset var supert. Jeg hadde brukt i vårt nåværende prosjekt
Takk for at du deler!
Så enkelt og fantastisk uttrykk. Jeg som tester hentet TC-ene mine fra dette uttrykket.
Takk for at du delte. Du har noen ødelagte lenker på denne siden. FYI.
kan noen fortelle hvorfor det ikke fungerte mitt..
jeg kopierte all koden og limte den inn i notepad++, men det fungerer ikke i det hele tatt?
vennligst hjelp meg ..
Fantastisk!!!!! Takk skal du ha.
Flott jobbet fyr! Enkelt og effektivt. Tusen takk for at du deler!
takk
Bra, takk. Men... Hva er et eksempel på en STERK pw? 'finner ikke en!-{}
Denne typen "styrkesjekker" fører folk ned på en veldig farlig vei. Den verdsetter karaktermangfold over passordfraselengden, noe som fører til at den vurderer kortere, mer varierte passord som sterkere enn lengre, mindre forskjellige passord. Det er en feilslutning som vil få brukerne dine i problemer hvis de noen gang står overfor en alvorlig hacking-trussel.
Jeg er ikke uenig, Jordan! Eksemplet ble ganske enkelt lagt ut som et eksempel på manuset. Min anbefaling til folk er å bruke et passordadministrasjonsverktøy for å lage uavhengige passordfraser for ethvert nettsted som er unikt for det. Takk!
takk det fungerer utmerket.
Takk, det fungerer fint
Jeg setter veldig pris på at du har søkt etter dette mange ganger, men til slutt fikk jeg innlegget ditt og er virkelig overrasket. TAKK SKAL DU HA
Takk kompis. Bare distribuert på nettstedet mitt, og det fungerer veldig bra.
Elsker å høre det! Du er hjertelig velkommen!
Jeg setter pris på at du deler! Har vært ute etter å øke passordstyrken på nettsiden vår, og denne fungerte slik jeg ønsket. Tusen takk!
Takk, håper du kan tilpasse den etter behov.
Du er en livesparer! Jeg analyserte strenger til venstre til høyre og i midten og tenkte at det er en bedre måte og fant kodebiten din ved å bruke Regex. Var i stand til å tinkle med det for nettstedet mitt ... Du aner ikke hvor mye dette hjalp. Tusen takk Douglas!!
Godt å høre!