CRM та платформи данихЕлектронний маркетинг та автоматизація маркетингу електронною поштою

Перевірте надійність пароля за допомогою JavaScript або jQuery та регулярних виразів (також із прикладами на стороні сервера!)

Я проводив деякі дослідження, щоб знайти хороший приклад перевірки надійності пароля, який використовує JavaScript та Регулярні вирази (Регекс). У моєму робочому додатку ми робимо повідомлення, щоб перевірити надійність пароля, і це досить незручно для наших користувачів.

Що таке Regex?

Регулярний вираз - це послідовність символів, що визначають шаблон пошуку. Зазвичай такі шаблони використовуються алгоритмами пошуку рядків для знаходити or знайти і замінити операції над рядками або для перевірки вводу. 

Ця стаття точно не навчить вас регулярних висловів. Просто знайте, що можливість використання регулярних виразів абсолютно спростить вашу розробку під час пошуку шаблонів у тексті. Важливо також зазначити, що більшість мов розробки оптимізували використання регулярних виразів ... тому замість парсингу та пошуку рядків, регулярний вираз зазвичай набагато швидший як на сервері, так і на стороні клієнта.

Я досить довго шукав в Інтернеті, перш ніж знайшов приклад деяких чудових регулярних виразів, які шукають комбінацію довжини, символів і символів. Однак код був трохи надмірним на мій смак і адаптованим для .NET. Тому я спростив код і помістив його в JavaScript. Завдяки цьому він перевіряє надійність пароля в режимі реального часу у веб-переглядачі клієнта, перш ніж опублікувати його назад… і надає користувачеві певний відгук про надійність пароля.

Введіть пароль

З кожним обведенням клавіатури пароль перевіряється на регулярний вираз, а потім користувачеві надається зворотний зв'язок у певному інтервалі під ним.

Функція надійності пароля 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;
  }
}

Якщо ви хочете оновити колір наконечника, це також можна зробити, оновивши код після // Return results лінія.

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

З jQuery нам фактично не потрібно писати форму з оновленням oninput:

<form>
    <label for="password">Enter password:</label>
    <input type="password" id="password">
    <p id="password-strength"></p>
</form>

Ми також можемо змінити колір повідомлень, якщо хочемо. 

$(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');
        }
    });
});

Затвердження вашого запиту на пароль

Важливо, щоб ви не просто перевіряли конструкцію пароля у своєму 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, консалтингова компанія з цифрової трансформації. Дуглас також є опублікованим автором посібника для чайників і книги про лідерство в бізнесі.

Статті по темі

33 Коментарі

  1. ДЯКУЮ ТОБІ! ДЯКУЮ ТОБІ! ДЯКУЮ ТОБІ! Я 2 тижні морочився з клятим кодом надійності пароля з інших веб-сайтів і висмикував собі волосся. Ваш короткий, працює так само, як я хочу, і, що найголовніше, його легко змінити для новачка JavaScript! Я хотів зафіксувати вердикт про міцність і не дозволити формі опублікувати фактичне оновлення пароля користувача, якщо він не пройшов тест на міцність. Код інших людей був надто складним, чи не працював належним чином, чи щось інше. Я тебе люблю! XXXXX

  2. Привіт, перш за все велике спасибі за ваші зусилля, я намагався використати це з Asp.net, але не спрацював, я використовую

    замість тегу,і це не спрацювало,будь-які пропозиції?!

  3. Для Нісрін: код у виділеному полі не працює з вирізанням і вставленням. Одинарна лапка переплутана. Проте код демонстраційного посилання правильний.

  4. “P @ s $ w0rD” відображається як сильний, хоча він може бути зламаний досить швидко за допомогою атаки на словника ...
    Щоб застосувати таку функцію на професійному рішенні, я вважаю, що важливо поєднати цей алгоритм із перевіренням на словники.

  5. Дякую за цей маленький код, тепер я можу використовувати його для перевірки міцності мого пароля, коли мої відвідувачі .вводять свої паролі,

  6. хтось може сказати, чому у мене це не вийшло ..

    я скопіював увесь код і вставив його в блокнот ++, але він взагалі не працює?
    будь ласка, допоможи мені..

  7. Цей тип "перевірки сили" веде людей дуже небезпечним шляхом. Він оцінює різноманітність символів за довжиною парольної фрази, змушуючи оцінювати коротші та різноманітніші паролі як міцніші, ніж довші та менш різноманітні. Це помилка, яка завадить вашим користувачам проблеми, якщо вони коли-небудь зіткнуться з серйозною загрозою злому.

    1. Я не погоджуюсь, Джордане! Приклад був просто викладений як приклад сценарію. Я рекомендую людям використовувати інструмент управління паролями для створення незалежних парольних фраз для будь-якого унікального для нього веб-сайту. Дякую!

  8. Ви живий заощаджувач! Я розбирав рядки ліворуч праворуч і по центру і думав, що є кращий спосіб, і знайшов ваш фрагмент коду за допомогою Regex. Був у змозі поспілкуватися з цим для мого сайту ... Ви навіть не уявляєте, наскільки це допомогло. Дуже дякую Дугласу !!

Що ви думаєте?

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.