טכנולוגיה מתעוררתפלטפורמות CRM ונתוניםשיווק בדוא"ל ושיווק אוטומטי באימייל

בדוק את עוצמת הסיסמה עם JavaScript וביטויים רגולריים (גם עם דוגמאות בצד השרת!)

ערכתי מחקר על מציאת דוגמה טובה לבודק חוזק סיסמה המשתמש JavaScript ו ביטויים רגילים (רגקס). ביישום בעבודתי אנו מבצעים פוסט בחזרה כדי לאמת את חוזק הסיסמה וזה די לא נוח עבור המשתמשים שלנו.

מה זה רגקס?

ביטוי רגולרי הוא רצף של תווים המגדירים דפוס חיפוש. בדרך כלל, דפוסים כאלה משמשים אלגוריתמים לחיפוש מחרוזות עבור למצוא or מצא והחלף פעולות על מיתרים, או לצורך אימות קלט. 

מאמר זה בהחלט לא אמור ללמד אתכם ביטויים קבועים. רק דע כי היכולת להשתמש בביטויים רגולריים תפשט לחלוטין את ההתפתחות שלך כשאתה מחפש תבניות בטקסט. חשוב לציין כי ברוב שפות הפיתוח אופטימיזציה של שימוש בביטוי קבוע ... אז במקום לנתח ולחפש מחרוזות שלב אחר שלב, Regex בדרך כלל מהירה הרבה יותר הן בשרת והן בצד הלקוח.

חיפשתי באינטרנט לא מעט לפני שמצאתי דוגמה של כמה ביטויים נהדרים המחפשים שילוב של אורך, תווים וסמלים. עם זאת, הקוד היה מוגזם לטעמי והותאם ל- .NET. אז פשטתי את הקוד ושמתי אותו ב- JavaScript. זה גורם לו לאמת את חוזק הסיסמה בזמן אמת בדפדפן הלקוח לפני פרסום זה בחזרה ... ומספק משוב למשתמש על חוזק הסיסמה.

הקלד סיסמא

בכל פעימה במקלדת, הסיסמה נבדקת על פי הביטוי הרגולרי ואז ניתן משוב למשתמש בטווח מתחתיו.

הנה הקוד

אל האני ביטויים רגילים לעשות עבודה נפלאה של מזעור אורך הקוד. פונקציית Javascript זו בודקת את עוצמת הסיסמה והאם קל, בינוני, קשה או קשה מאוד לנחש את סיכולה. כשהאדם מקליד, הוא מציג טיפים לעודד אותו להיות חזק יותר. זה מאמת את הסיסמה על סמך:

  • אורך - אם האורך הוא מתחת או מעל 8 תווים.
  • מקרה מעורב – אם הסיסמה כוללת תווים גדולים וקטנים.
  • מספרים – אם הסיסמה כוללת מספרים.
  • תווים מיוחדים – אם הסיסמה כוללת תווים מיוחדים.

הפונקציה מציגה את הקושי וכן כמה טיפים להקשחת הסיסמה נוספת.

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;
  }
}

הקשחת בקשת הסיסמה שלך

זה חיוני שלא לאמת רק את בניית הסיסמה בתוך ה- Javascript שלך. זה יאפשר לכל מי שיש לו כלים לפיתוח דפדפן לעקוף את הסקריפט ולהשתמש בכל הסיסמה שהם רוצים. עליך להשתמש תמיד בבדיקה בצד השרת כדי לאמת את חוזק הסיסמה לפני שתשמור אותה בפלטפורמה שלך.

פונקציית PHP עבור חוזק סיסמה

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 עבור חוזק סיסמה

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# עבור חוזק סיסמה

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 עבור חוזק סיסמה

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";
  }
}

Douglas Karr

Douglas Karr הוא המייסד של Martech Zone ומומחה מוכר לטרנספורמציה דיגיטלית. דאגלס עזר להקים כמה סטארט-אפים מצליחים של MarTech, סייע בבדיקת נאותות של למעלה מ-5 מיליארד דולר ברכישות והשקעות של Martech, וממשיך להשיק פלטפורמות ושירותים משלו. הוא מייסד שותף של Highbridge, חברת ייעוץ לטרנספורמציה דיגיטלית. דאגלס הוא גם מחבר שפורסם של מדריך Dummy וספר מנהיגות עסקית.

תגובות 33

  1. תודה! תודה! תודה! אני משתטה כבר שבועיים עם קוד חוזק סיסמה ארור מאתרים אחרים ושולפת את השיער שלי. שלך קצר, עובד בדיוק כמו שאני רוצה והכי טוב, קל למתחילים ב-Javascript לשנות! רציתי ללכוד את פסק הדין בכוח ולא לתת לטופס לפרסם בפועל את הסיסמה של המשתמש אלא אם כן הוא עמד במבחן החוזק. הקוד של אנשים אחרים היה מסובך מדי או לא עבד כמו שצריך או משהו אחר. אני אוהב אותך! XXXXXX

  2. "P@s$w0rD" מופיע בעוצמה, למרות שהוא יפצח די מהר עם התקפת מילון...
    כדי לפרוס תכונה כזו על פתרון מקצועי, אני מאמין שחשוב לשלב את האלגוריתם הזה עם בדיקת מילון.

  3. תודה על הקוד הקטן הזה, עכשיו אני יכול להשתמש בו כדי לבדוק את עוצמת הסיסמה שלי כאשר המבקרים שלי מזינים את הסיסמאות שלהם,

  4. סוג זה של "בודק כוח" מוביל אנשים בדרך מסוכנת מאוד. הוא מעריך את גיוון התווים על פני אורך ביטוי הסיסמה, מה שמוביל אותו לדרג סיסמאות קצרות ומגוונות יותר כחזקות יותר מאשר סיסמאות ארוכות ופחות מגוונות. זהו כשל שיגרום למשתמשים שלך להסתבך אם הם יתמודדו אי פעם עם איום פריצה רציני.

    1. אני לא מסכים, ג'ורדן! הדוגמה פשוט הוצאה כדוגמה לתסריט. ההמלצה שלי לאנשים היא להשתמש בכלי ניהול סיסמאות כדי ליצור ביטויי סיסמה עצמאיים לכל אתר שייחודיים לו. תודה!

  5. אתה שומר חי! ניתוחתי מחרוזות משמאל לימין ולמרכז וחשבתי שיש דרך טובה יותר ומצאתי את פיסת הקוד שלך באמצעות Regex. היה מסוגל להתעסק עם זה עבור האתר שלי ... אין לך מושג כמה זה עזר. תודה רבה דאגלס!!

מה אתה חושב?

אתר זה משתמש Akismet כדי להפחית דואר זבל. למד כיצד הנתונים שלך מעובדים.

מאמרים נוספים