Проверьте надежность пароля с помощью JavaScript или jQuery и регулярных выражений (также с примерами на стороне сервера!)
Я проводил небольшое исследование, чтобы найти хороший пример средства проверки надежности пароля, которое использует JavaScript до Обычные выражения (Regex). В приложении на моей работе мы делаем обратную публикацию для проверки надежности пароля, и это довольно неудобно для наших пользователей.
Что такое регулярное выражение?
Регулярное выражение - это последовательность символов, определяющая шаблон поиска. Обычно такие шаблоны используются алгоритмами поиска строк для найдите or найти и заменить операции со строками или для проверки ввода.
Эта статья определенно не для того, чтобы научить вас регулярным выражениям. Просто знайте, что возможность использовать регулярные выражения абсолютно упростит вашу разработку при поиске шаблонов в тексте. Также важно отметить, что большинство языков разработки оптимизировали использование регулярных выражений ... поэтому вместо пошагового синтаксического анализа и поиска строк Regex обычно намного быстрее как на стороне сервера, так и на стороне клиента.
Я немного искал в Интернете, прежде чем нашел пример некоторых отличных регулярных выражений, которые ищут комбинацию длины, символов и символов. Однако, на мой вкус, код был немного избыточен и заточен под .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"
Функция С# для надежности пароля
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";
}
}
И если вы просто ищете отличный генератор паролей, я создал для этого хороший небольшой онлайн-инструмент.