CRM og dataplattformerE-postmarkedsføring og e-postmarkedsføringsautomatisering

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.

Passordgenerator

Douglas Karr

Douglas Karr er grunnleggeren av Martech Zone og en anerkjent ekspert på digital transformasjon. Douglas har hjulpet til med å starte flere vellykkede MarTech-oppstarter, har hjulpet til med due diligence på over 5 milliarder dollar i Martech-oppkjøp og -investeringer, og fortsetter å lansere sine egne plattformer og tjenester. Han er medgründer av Highbridge, et konsulentfirma for digital transformasjon. Douglas er også en publisert forfatter av en Dummies guide og en bok om lederskap for bedrifter.

Relaterte artikler

33 Kommentarer

  1. 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

  2. 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?!

  3. Til Nisreen: koden i den uthevede boksen fungerer ikke med en cut'n'paste. Enkeltsitatet er rotet til. Koden til demonstrasjonslenken er imidlertid fin.

  4. "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.

  5. Takk for denne lille koden, jeg kan nå bruke den til å teste passordstyrken min når de besøkende skriver inn passordene sine,

  6. 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 ..

  7. 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.

    1. 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!

  8. 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

  9. 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!!

Hva tror du?

Dette nettstedet bruker Akismet for å redusere spam. Lær hvordan kommentaren din behandles.