Проверка, что пароли, отправляемые при регистрации учетной записи, входе в систему и изменении пароля, проверяются на наличие в списке скомпрометированных паролей
Описание
Проверка паролей на наличие в списке скомпрометированных паролей — это важная мера безопасности, которая помогает предотвратить использование слабых или уже скомпрометированных паролей. Это требование подразумевает, что при регистрации, входе в систему и изменении пароля система должна проверять, не находится ли введенный пароль в известном списке скомпрометированных паролей.
Почему это важно
- Защита пользователей: Использование скомпрометированных паролей может привести к несанкционированному доступу к учетным записям. Проверка паролей помогает защитить пользователей от таких угроз.
 - Улучшение безопасности: Это помогает предотвратить использование распространенных и легко угадываемых паролей, что повышает общую безопасность системы.
 - Соответствие стандартам: Многие стандарты безопасности, такие как NIST, рекомендуют проверять пароли на наличие в списках скомпрометированных паролей.
 
Способы реализации с примерами
Использование API для проверки паролей: Используйте API, такие как "Have I Been Pwned", для проверки паролей на наличие в списках скомпрометированных паролей.
Пример:
import requests
def is_password_breached(password):
    # Хэшируем пароль и проверяем его в API
    hashed_password = hashlib.sha1(password.encode('utf-8')).hexdigest().upper()
    prefix = hashed_password[:5]
    suffix = hashed_password[5:]
    response = requests.get(f'https://api.pwnedpasswords.com/range/{prefix}')
    if response.status_code == 200:
        for line in response.text.splitlines():
            hash_suffix, count = line.split(':')
            if hash_suffix == suffix:
                return True  # Пароль скомпрометирован
    return False  # Пароль не скомпрометирован
Проверка пароля при регистрации: При регистрации учетной записи проверяйте, не находится ли пароль в списке скомпрометированных паролей.
Пример:
@app.route('/register', methods=['POST'])
def register():
    username = request.json.get('username')
    password = request.json.get('password')
    if is_password_breached(password):
        return jsonify({'error': 'Password has been compromised. Please choose a different password.'}), 400
    # Логика регистрации пользователя
    create_user(username, password)
    return jsonify({'message': 'User registered successfully'})
Проверка пароля при входе в систему: Проверяйте пароли на наличие в списке скомпрометированных паролей также при входе в систему.
Пример:
@app.route('/login', methods=['POST'])
def login():
    username = request.json.get('username')
    password = request.json.get('password')
    if is_password_breached(password):
        return jsonify({'error': 'Password has been compromised. Please choose a different password.'}), 400
    if authenticate(username, password):
        return jsonify({'message': 'Login successful'})
    return jsonify({'error': 'Invalid credentials'}), 401
Проверка пароля при изменении: Также проверяйте пароли при изменении пароля.
Пример:
@app.route('/change_password', methods=['POST'])
def change_password():
    username = request.json.get('username')
    current_password = request.json.get('current_password')
    new_password = request.json.get('new_password')
    if is_password_breached(new_password):
        return jsonify({'error': 'New password has been compromised. Please choose a different password.'}), 400
    # Логика изменения пароля
    update_password(username, new_password)
    return jsonify({'message': 'Password changed successfully'})
Примеры уязвимого кода
# Пример уязвимого кода на Python
@app.route('/register', methods=['POST'])
def register():
    username = request.json.get('username')
    password = request.json.get('password')
    # Нет проверки на наличие пароля в списке скомпрометированных
    create_user(username, password)  # Уязвимость: пользователь может зарегистрироваться с скомпрометированным паролем
Проблема: В этом коде отсутствует проверка пароля на наличие в списке скомпрометированных, что позволяет пользователю зарегистрироваться с небезопасным паролем.
Причины, к которым может привести несоблюдение требования
- Несанкционированный доступ: Использование скомпрометированных паролей может привести к несанкционированному доступу к учетным записям.
 - Утечка данных: Если пользователи используют скомпрометированные пароли, это может привести к утечке конфиденциальной информации.
 - Проблемы с безопасностью: Отсутствие проверки паролей увеличивает риск атак и снижает общую безопасность системы.
 
Рекомендации
- Всегда проверяйте пароли на наличие в списках скомпрометированных при регистрации, входе в систему и изменении пароля.
 - Используйте надежные API для проверки паролей, такие как "Have I Been Pwned".
 - Обучайте пользователей важности использования уникальных и сложных паролей.
 - Регулярно обновляйте механизмы проверки паролей в соответствии с лучшими практиками безопасности.