Перейти к содержанию

Проверка того, что пароли, отправляемые при регистрации аккаунта, входе в систему и изменении пароля, проверяются на наличие в списке скомпрометированных паролей

Описание

Это требование подразумевает, что при регистрации нового аккаунта, входе в систему или изменении пароля, система должна проверять введенные пароли против базы данных скомпрометированных паролей. Это помогает предотвратить использование небезопасных паролей и повышает общую безопасность учетных записей.

Почему это важно

  1. Безопасность: Проверка паролей на наличие в списке скомпрометированных помогает предотвратить использование паролей, которые уже были скомпрометированы в других утечках данных.
  2. Защита пользователей: Это снижает риск несанкционированного доступа к учетным записям пользователей, особенно если они используют одни и те же пароли на нескольких сайтах.
  3. Соблюдение стандартов: Многие стандарты безопасности требуют проверки паролей на наличие в списках скомпрометированных.
  4. Улучшение пользовательского опыта: Пользователи получают уведомления о том, что их пароли небезопасны, и могут выбрать более надежные альтернативы.

Способы реализации с примерами

Использование API для проверки паролей: Интегрируйте API, который предоставляет доступ к базе данных скомпрометированных паролей, например, API Have I Been Pwned.

Пример:

import requests

def is_password_breached(password):
    # Хешируем пароль с использованием SHA-1
    import hashlib
    sha1_hash = hashlib.sha1(password.encode()).hexdigest().upper()
    prefix = sha1_hash[:5]
    suffix = sha1_hash[5:]

    # Запрос к API Have I Been Pwned
    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": "This password has been compromised. Please choose a different one."}), 400

    # Логика регистрации пользователя
    return jsonify({"message": "User registered successfully."}), 201

Проверка пароля при входе: Аналогично, проверяйте пароли при входе в систему.

Пример:

@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": "This password has been compromised. Please choose a different one."}), 400

    # Логика аутентификации пользователя
    return jsonify({"message": "Login successful."}), 200

Проверка пароля при изменении: Также проверяйте пароли при их изменении.

Пример:

@app.route('/change-password', methods=['POST'])
def change_password():
    username = request.json.get('username')
    new_password = request.json.get('new_password')

    if is_password_breached(new_password):
        return jsonify({"error": "This password has been compromised. Please choose a different one."}), 400

    # Логика изменения пароля
    return jsonify({"message": "Password changed successfully."}), 200

Примеры уязвимого кода

# Пример уязвимого кода на Python
@app.route('/register', methods=['POST'])
def register():
    password = request.json.get('password')
    # Отсутствие проверки на скомпрометированные пароли
    # Логика регистрации пользователя
    return jsonify({"message": "User registered successfully."}), 201

Проблема: В этом коде отсутствует проверка пароля на наличие в списке скомпрометированных, что может привести к использованию небезопасных паролей.

Причины, к которым может привести несоблюдение требования

  1. Уязвимость к несанкционированному доступу: Использование скомпрометированных паролей может привести к взлому учетных записей.
  2. Проблемы с безопасностью: Это может привести к утечкам данных и компрометации конфиденциальной информации.
  3. Проблемы с соблюдением стандартов: Несоблюдение требований по проверке паролей может привести к юридическим последствиям и штрафам.

Рекомендации

  • Интегрируйте API для проверки паролей на наличие в списках скомпрометированных.
  • Проверяйте пароли при регистрации, входе и изменении пароля.
  • Уведомляйте пользователей о том, что их пароли небезопасны, и предлагайте им выбрать более надежные альтернативы.
  • Регулярно проверяйте систему на наличие уязвимостей, связанных с управлением паролями и безопасностью.