
Skontrolujte silu hesla pomocou JavaScriptu a regulárnych výrazov (aj s príkladmi na strane servera!)
Robil som prieskum zameraný na nájdenie dobrého príkladu kontroly sily hesla, ktorá používa JavaScript a Pravidelné výrazy (Regex). V aplikácii v mojej práci urobíme príspevok späť, aby sme overili silu hesla a je to pre našich používateľov dosť nepohodlné.
Čo je Regex?
Regulárny výraz je postupnosť znakov, ktoré definujú vzor vyhľadávania. Takéto vzory sa zvyčajne používajú v algoritmoch vyhľadávania reťazcov nájsť or nájsť a nahradiť operácie s reťazcami alebo na overenie vstupu.
Tento článok vás rozhodne nemá učiť regulárne výrazy. Vedzte, že schopnosť používať regulárne výrazy úplne zjednoduší váš vývoj pri hľadaní vzorov v texte. Je tiež dôležité poznamenať, že väčšina vývojových jazykov optimalizovala použitie regulárneho výrazu ... takže namiesto postupnej analýzy a vyhľadávania reťazcov je Regex zvyčajne oveľa rýchlejší na strane servera aj klienta.
Než som našiel, dosť som prehľadal web príklad niekoľkých skvelých regulárnych výrazov, ktoré hľadajú kombináciu dĺžky, znakov a symbolov. Avšak, kód bol na môj vkus trochu prehnaný a prispôsobený pre .NET. Takže som zjednodušil kód a vložil ho do JavaScriptu. Toto umožňuje overiť silu hesla v reálnom čase v prehliadači klienta pred jeho opätovným zverejnením ... a poskytuje používateľovi spätnú väzbu o sile hesla.
Zadajte heslo
Pri každom stlačení klávesnice sa heslo testuje proti regulárnemu výrazu a potom sa používateľovi poskytuje spätná väzba v rozsahu pod ním.
Tu je kódex
و Pravidelné výrazy urobte fantastickú prácu pri minimalizácii dĺžky kódu. Táto funkcia Javascript kontroluje silu hesla a či je jeho prekazenie ľahké, stredné, ťažké alebo extrémne ťažké uhádnuť. Keď osoba píše, zobrazuje tipy, ako ju povzbudiť, aby bola silnejšia. Overuje heslo na základe:
- Dĺžka – Ak je dĺžka menšia alebo väčšia ako 8 znakov.
- Zmiešaný prípad – Ak heslo obsahuje veľké aj malé písmená.
- Čísla – Ak heslo obsahuje čísla.
- Špeciálne znaky – Ak heslo obsahuje špeciálne znaky.
Funkcia zobrazuje náročnosť, ako aj niekoľko tipov na ďalšie posilnenie hesla.
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;
}
}
Vystuženie vašej požiadavky na heslo
Je nevyhnutné, aby ste nielen potvrdili vytvorenie hesla vo svojom Javascripti. Toto by umožnilo každému, kto má vývojové nástroje prehliadača, obísť skript a použiť akékoľvek heslo, ktoré by chcel. Pred uložením na svoju platformu by ste mali vždy použiť kontrolu na strane servera na overenie sily hesla.
PHP funkcia pre silu hesla
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";
}
}
Funkcia Python pre silu hesla
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"
Funkcia C# pre silu hesla
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 funkcia pre silu hesla
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šiel som ďalšiu kontrolu sily hesla. Ich algoritmus založený na slovníku slov. Vyskúšajte jeden na microsoft.com - http://www.microsoft.com/protect/yourself/password/checker.mspx a jeden na itimpl.com - http://www.itsimpl.com
ĎAKUJEM! ĎAKUJEM! ĎAKUJEM! Už 2 týždne šaškujem s prekliatym kódom sily hesla z iných webov a ťahám si vlasy. Ten váš je krátky, funguje presne tak, ako chcem, a čo je najlepšie, pre začiatočníka v javascripte ho ľahko upraví! Chcel som zachytiť verdikt sily a nedovoliť, aby formulár skutočne aktualizoval heslo používateľa, pokiaľ nespĺňa test pevnosti. Kód iných ľudí bol príliš komplikovaný alebo nefungoval správne alebo niečo iné. Ľúbim ťa! XXXXX
Nie je začo! Nie je začo! Nie je začo!
Tiež ťa milujem!
Ďakujeme, že ste napísali kúsok kódu, ktorý robí presne to, čo hovorí na plechovke!
Ahoj, v prvom rade ďakujem mnohokrát za vaše úsilie, snažil som sa to použiť s Asp.net, ale nefungoval som, používam to
namiesto značky a nefungovalo to, nejaké návrhy?!
Pre Nisreen: kód vo zvýraznenom poli nefunguje s cut'n'paste. Jediný citát je zmätený. Kód ukážkového odkazu je však v poriadku.
Hej, páči sa mi váš scenár! Preložil som to do holandčiny a zverejnil som to na svojom fóre tu!
dobrá práca! presne ako by sa to malo robiť na klientovi
veľmi pekná práca….
Ďakujem Douglasovi, používam ho na svoju súčasnú prácu.
„P @ s $ w0rD“ sa ukazuje ako silný, aj keď by bol pomerne rýchlo prelomený slovníkovým útokom ...
Aby som nasadil takúto funkciu na profesionálne riešenie, som presvedčený, že je dôležité spojiť tento algoritmus s kontrolou slovníka.
Funguje skvele v XULRunner s malými zmenami. Vďaka!
Vďaka za tento malý kód, ktorý teraz môžem použiť na otestovanie sily môjho hesla, keď moji návštevníci zadajú svoje heslá,
Skvelý kúsok kódovania
Skript bol super. Použil som v našom aktuálnom projekte
Ďakujeme vám za zdieľanie!
Tak jednoduchý a fantastický výraz. Ja ako tester som odvodil svoje TC od tohto výrazu.
Ďakujem za zdieľanie. Na tejto stránke máte niekoľko nefunkčných odkazov. FYI.
môže niekto povedať, prečo to nefungovalo moje ..
skopíroval som celý kód a vložil som ho do poznámkového bloku ++, ale nefunguje to vôbec?
prosím pomôžte mi..
Fantastické !!!!! Ďakujem.
Skvelá práca chlap! Jednoduché a efektívne. Ďakujem veľmi pekne za zdieľanie!
ďakujem
Dobre, thx. Ale ... Aký je príklad SILNÉHO PW? „nemôžem nájsť! - {}
Tento typ „kontroly sily“ vedie ľudí po veľmi nebezpečnej ceste. Hodnotí rozmanitosť znakov nad dĺžkou prístupovej frázy, čo vedie k hodnoteniu kratších a rozmanitejších hesiel ako silnejších ako dlhších a menej rozmanitých hesiel. Toto je klam, ktorý vašich používateľov dostane do problémov, ak niekedy čelia vážnej hackerskej hrozbe.
Nesúhlasím, Jordan! Tento príklad bol jednoducho uvedený ako príklad scenára. Moje odporúčanie pre ľudí je využiť nástroj na správu hesiel na vytvorenie nezávislých prístupových fráz pre akékoľvek stránky, ktoré sú pre ne jedinečné. Vďaka!
ďakujem funguje skvele.
Ďakujem, že je v poriadku
naozaj si vážim, že ste toto hľadali mnohokrát, ale nakoniec som dostal váš príspevok a som skutočne ohromený. ĎAKUJEM
Vďaka kamoš. Práve nasadené na mojej webovej stránke a funguje veľmi dobre.
Rád to počujem! Ste srdečne pozvaní!
Vážim si vás, že zdieľate! Hľadali sme posilniť silu hesla na našom webe a toto fungovalo tak, ako som chcel. Ďakujem ti veľmi pekne!
Ďakujeme, dúfame, že si ho budete môcť prispôsobiť podľa potreby.
Ste živým šetričom! Analyzoval som reťazce vľavo vpravo a na stred a myslel som si, že existuje lepší spôsob. Našiel som váš kúsok kódu pomocou nástroja Regex. Dokázal s tým zafungovať na mojej stránke ... Netušíte, ako veľmi to pomohlo. Ďakujem moc Douglas !!
Super počuť!