
Provjerite jačinu lozinke pomoću JavaScripta ili jQueryja i regularnih izraza (i sa primjerima na strani servera!)
Radio sam neko istraživanje kako bih pronašao dobar primjer provjere jačine lozinke koja koristi JavaScript i Regularni izrazi (regex). U aplikaciji na mom poslu radimo povratnu objavu kako bismo provjerili snagu lozinke i to je prilično nezgodno za naše korisnike.
Šta je Regex?
Regularni izraz je niz znakova koji definiraju obrazac pretraživanja. Obično takve obrasce koriste algoritmi pretraživanja nizova za pronaći or pronaći i zamijeniti operacije na stringovima ili za provjeru ulaznosti.
Ovaj članak definitivno ne želi naučiti vas regularnim izrazima. Samo znajte da će mogućnost upotrebe regularnih izraza apsolutno pojednostaviti vaš razvoj dok tražite uzorke u tekstu. Takođe je važno napomenuti da je većina razvojnih jezika optimizovala upotrebu regularnih izraza ... pa, umjesto raščlanjivanja i pretraživanja nizova korak po korak, Regex je obično mnogo brži i na serveru i na strani klijenta.
Prilično sam pretraživao web prije nego što sam pronašao primjer nekih sjajnih regularnih izraza koji traže kombinaciju dužine, znakova i simbola. Međutim, kod je bio malo pretjeran za moj ukus i skrojen za .NET. Zato sam pojednostavio kod i stavio ga u JavaScript. Ovo ga čini validacijom jačine lozinke u realnom vremenu na klijentovom pretraživaču pre nego što je ponovo objavi... i pruža neke povratne informacije korisniku o jačini lozinke.
Upišite lozinku
Sa svakim potezom tipkovnice, lozinka se testira u odnosu na regularni izraz, a zatim se korisniku pruža povratna informacija u rasponu ispod nje.
JavaScript funkcija jačine lozinke
The Regularni izrazi uradite fantastičan posao minimiziranja dužine koda. Ova Javascript funkcija provjerava jačinu lozinke i da li je njeno probijanje lako, srednje, teško ili izuzetno teško pogoditi. Dok osoba kuca, prikazuje savjete kako je ohrabriti da bude jača. Potvrđuje lozinku na osnovu:
- dužina – Ako je dužina ispod ili veća od 8 znakova.
- Mixed Case – Ako lozinka ima i velika i mala slova.
- brojevi – Ako lozinka uključuje brojeve.
- posebne znakove – Ako lozinka sadrži posebne znakove.
Funkcija prikazuje poteškoću kao i neke savjete za dalje učvršćivanje lozinke.
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;
}
}
Ako želite ažurirati boju vrha, to možete učiniti i ažuriranjem koda nakon // Return results
linija.
// 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 funkcija jačine lozinke
Uz jQuery, zapravo ne moramo pisati obrazac sa oninput ažuriranjem:
<form>
<label for="password">Enter password:</label>
<input type="password" id="password">
<p id="password-strength"></p>
</form>
Također možemo promijeniti boju poruka ako želimo.
$(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');
}
});
});
Utvrđivanje zahtjeva za lozinkom
Bitno je da u svom Javascriptu ne potvrdite samo konstrukciju lozinke. To bi omogućilo svima koji imaju alate za razvoj preglednika da zaobiđu skriptu i koriste lozinku koju god žele. Uvijek biste trebali koristiti provjeru na strani poslužitelja za provjeru snage lozinke prije nego što je pohranite na svojoj platformi.
PHP funkcija za jačinu lozinke
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 funkcija za jačinu lozinke
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# funkcija za jačinu lozinke
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 funkcija za jačinu lozinke
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";
}
}
A ako samo tražite odličan generator lozinki, napravio sam lijep mali online alat za to.
Našao sam još jedan provjeravač snage lozinke. Njihov algoritam zasnovan na rečniku reči. Isprobajte jedan na microsoft.com – http://www.microsoft.com/protect/yourself/password/checker.mspx i jedan na itsimpl.com – http://www.itsimpl.com
HVALA TI! HVALA TI! HVALA TI! Glumio sam se 2 sedmice s prokletim kodom za jačinu lozinke sa drugih web stranica i čupao sam kosu. Vaš je kratak, radi baš kako ja želim i najbolje od svega, lak za javascript početnike za izmjenu! Hteo sam da uhvatim presudu o jačini i ne dozvolim da obrasca objavi da zapravo ažurira korisničku lozinku osim ako ne prođe test snage. Kod drugih ljudi je bio previše komplikovan ili nije radio kako treba ili nešto drugo. Volim te! XXXXX
Nema na čemu! Nema na čemu! Nema na čemu!
Volim i ja tebe!
Hvala vam što ste napisali dio koda koji radi upravo ono što piše na konzervi!
Zdravo, prije svega hvala puno na trudu, pokušao sam ovo koristiti sa Asp.net-om, ali nije išlo, koristim
umjesto oznake, i nije uspjelo, ima li prijedloga?!
Za Nisreen: kod u označenom polju ne radi sa cut'n'paste. Jednostruki navodnik je zbrkan. Međutim, kod demonstracionog linka je u redu.
Hej, sviđa mi se tvoj scenario! Preveo sam ga na holandski i postavio na svom forumu ovde!
odličan posao! tačno kako to treba da se uradi na klijentu
veoma lep posao....
Hvala Douglas, koristim ga za svoj trenutni posao.
“P@s$w0rD” se pokazuje jakom, iako bi bilo prilično brzo razbijeno napadom iz rječnika…
Za implementaciju takve funkcije na profesionalno rješenje, vjerujem da je važno kombinirati ovaj algoritam s provjerom rječnika.
Odlično radi u XULRunner-u sa malim promjenama. Hvala!
Hvala za ovaj mali kod, sada ga mogu koristiti da testiram snagu svoje lozinke kada moji posjetitelji .unesu svoje lozinke,
Odličan dio kodiranja
Scenarij je bio super. Koristio sam u našem trenutnom projektu
Hvala vam što ste podelili!
Tako jednostavan i fantastičan izraz. Ja sam kao tester izveo svoje TC iz ovog izraza.
Hvala na dijeljenju. Imate nekoliko neispravnih linkova na ovoj stranici. FYI.
moze li neko reci zasto meni nije uspelo..
kopirao sam sav kod i zalijepio ga u notepad++, ali uopće ne radi?
molim te pomozi mi..
Fantastično!!!!! Hvala ti.
Odličan posao momak! Jednostavan i efikasan. Hvala vam puno na dijeljenju!
hvala ti
Dobro, hvala. Ali… Koji je primjer JAKO PW? 'ne mogu pronaći!-{}
Ova vrsta "provjere snage" vodi ljude na vrlo opasan put. On vrednuje različitost znakova u odnosu na dužinu pristupne fraze, što ga navodi da kraće, raznovrsnije lozinke ocenjuje kao jače od dužih, manje raznolikih lozinki. To je zabluda koja će dovesti vaše korisnike u nevolje ako se ikada suoče s ozbiljnom prijetnjom hakovanja.
Ne slažem se, Jordan! Primjer je jednostavno iznesen kao primjer skripte. Moja preporuka za ljude je da koriste alat za upravljanje lozinkama za kreiranje nezavisnih pristupnih fraza za bilo koju stranicu koja je jedinstvena za nju. Hvala!
hvala odlično radi.
Hvala dobro radi
Zaista cijenim što su me ovo tražili mnogo puta, ali konačno sam dobio tvoj post i stvarno sam oduševljen. HVALA TI
Hvala druže. Upravo postavljen na moju web stranicu i radi vrlo dobro.
Volim to čuti! Nema na čemu!
Cijenim što dijelite! Tražio sam da pojačam jačinu lozinke na našoj web stranici i ova je funkcionirala onako kako sam želio. Hvala ti puno!
Hvala, nadam se da ćete moći da ga prilagodite prema potrebi.
Vi ste spasilac uživo! Analizirao sam nizove lijevo desno i centar i pomislio da postoji bolji način i pronašao sam vaš dio koda koristeći Regex. Mogao sam da se pozabavim time za moju stranicu… Nemate pojma koliko je ovo pomoglo. Hvala puno Douglas!!
Divno je čuti!