
Provjerite snagu lozinke s JavaScriptom i regularnim izrazima (također s primjerima na strani poslužitelja!)
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 vraćamo post kako bismo provjerili snagu lozinke i prilično je nezgodno za naše korisnike.
Što je Regex?
Regularni izraz je niz znakova koji definiraju obrazac pretraživanja. Obično se takvi uzorci koriste algoritmima pretraživanja nizova za naći or pronaći i zamijeniti operacije na nizovima ili za provjeru ulaznosti.
Ovaj članak definitivno ne želi naučiti vas regularnim izrazima. Samo znajte da će vam mogućnost upotrebe regularnih izraza apsolutno pojednostaviti razvoj dok tražite uzorke u tekstu. Također je važno napomenuti da je većina razvojnih jezika optimizirala upotrebu regularnih izraza ... pa, umjesto raščlanjivanja i pretraživanja nizova korak po korak, Regex je obično mnogo brži i na poslužitelju 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 duljine, znakova i simbola. Ipak, kod je za moj ukus bio malo pretjeran i prilagođen za .NET. Zato sam pojednostavio kod i stavio ga u JavaScript. To omogućuje provjeru snage lozinke u stvarnom vremenu u klijentovom pregledniku prije nego što je pošalje natrag ... i pruža neke povratne informacije korisniku o snazi lozinke.
Upišite lozinku
Svakim potezom tipkovnice zaporka se testira u odnosu na regularni izraz, a zatim se korisniku pruža povratna informacija u rasponu ispod nje.
Evo Kodeksa
Korištenje električnih romobila ističe Regularni izrazi napraviti fantastičan posao smanjivanja duljine koda. Ova Javascript funkcija provjerava snagu lozinke i je li njezino skrivanje lako, srednje, teško ili iznimno teško pogoditi. Dok osoba tipka, prikazuje savjete kako je potaknuti da bude jača. Provjerava lozinku na temelju:
- Dužina – Ako je duljina manja ili veća od 8 znakova.
- Mješoviti slučaj – Ako lozinka ima i velika i mala slova.
- Brojevi – Ako lozinka uključuje brojeve.
- Posebne Likovi – Ako lozinka uključuje posebne znakove.
Funkcija prikazuje težinu, kao i neke savjete o dodatnom očvršćavanju 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;
}
}
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 svoju platformu.
PHP funkcija za snagu 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 snagu 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 snagu 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 snagu 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";
}
}
Našao sam još jednu provjeru jačine lozinke. Njihov algoritam temelji se na rječniku riječ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 VAM! HVALA VAM! HVALA VAM! Šalio sam se 2 tjedna s prokletim kodom za jačinu lozinke s drugih web stranica i čupao sam kosu. Vaš je kratak, radi baš onako kako ja želim i što je najbolje od svega, lako ga je modificirati početnik u javascriptu! Htio sam zabilježiti ocjenu o snazi i ne dopustiti da obrazac objavi ažurira korisničku lozinku osim ako nije zadovoljila test snage. Kôd drugih ljudi bio je prekompliciran ili nije dobro funkcionirao ili nešto treće. Volim te! XXXXX
Molim! Molim! Molim!
I ja tebe volim!
Hvala vam što ste napisali dio koda koji radi točno ono što piše na limenci!
Bok, prije svega puno hvala na trudu, pokušao sam ovo koristiti s Asp.net-om, ali nije uspio, koristim
umjesto oznake, i nije radilo, bilo kakav prijedlog?!
Za Nisreen: kod u označenom okviru ne radi s cut'n'paste. Jednostruki navodnik je zbrkan. Kôd poveznice za demonstraciju je ipak u redu.
Hej, sviđa mi se tvoj scenarij! Preveo sam ga na nizozemski i objavio na svom forumu ovdje!
odličan posao! točno kako to treba učiniti na klijentu
jako lijep posao....
Hvala Douglas, koristim ga za svoj trenutni posao.
“P@s$w0rD” pokazuje jako, iako bi se prilično brzo razbio napadom rječnika...
Za implementaciju takve značajke na profesionalnom rješenju, vjerujem da je važno kombinirati ovaj algoritam s provjerom rječnika.
Sjajno radi u XULRunneru uz malo izmjena. Hvala!
Hvala na ovom malom kodu, sada ga mogu koristiti za testiranje snage svoje lozinke kada moji posjetitelji .unose svoje lozinke,
Sjajan dio kodiranja
Scenarij je bio super. Koristio sam u našem trenutnom projektu
Hvala za dijeljenje!
Tako jednostavan i fantastičan izraz. Ja sam kao tester izveo svoje TC-ove iz ovog izraza.
Hvala što si podijelio. Na ovoj stranici imate nekoliko neispravnih veza. FYI.
može li netko reći, zašto meni nije upalilo..
kopirao sam sav kod i zalijepio ga u notepad++, ali uopće ne radi?
molim te pomozi mi..
Fantastičan!!!!! Hvala vam.
Super posao momak! Jednostavan i učinkovit. Hvala vam puno na dijeljenju!
hvala ti
Dobro, hvala. Ali… Što je primjer JAKO PW? 'ne mogu ga pronaći!-{}
Ova vrsta "provjere snage" vodi ljude na vrlo opasan put. Procjenjuje raznolikost znakova u odnosu na duljinu šifre, što ga dovodi do ocjenjivanja kraćih, raznolikijih lozinki jačim od duljih, manje raznolikih lozinki. To je zabluda koja će vaše korisnike dovesti u probleme ako se ikada suoče s ozbiljnom prijetnjom hakiranja.
Ne slažem se, Jordan! Primjer je jednostavno iznesen kao primjer skripte. Moja preporuka za ljude je korištenje alata za upravljanje lozinkama za stvaranje neovisnih zaporki za bilo koju stranicu koja je jedinstvena za nju. Hvala!
hvala super radi.
Hvala dobro radi
stvarno sam zahvalan što su me ovo tražili mnogo puta, ali konačno sam dobio tvoj post i stvarno sam oduševljen. HVALA VAM
Hvala druže. Upravo postavljeno na moju web stranicu i radi vrlo dobro.
Volim to čuti! Nema na čemu!
Cijenim što dijelite! Tražio sam pojačati snagu lozinke na našoj web stranici i ova je funkcionirala onako kako sam želio. Puno ti hvala!
Hvala, nadam se da ćete ga moći prilagoditi prema potrebi.
Vi ste spasilac uživo! Analizirao sam nizove lijevo desno i središte i pomislio sam da postoji bolji način i pronašao vaš dio koda koristeći Regex. Mogao sam se pozabaviti time za moju stranicu... Nemate pojma koliko je ovo pomoglo. Hvala puno Douglas!!
Sjajno čuti!