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

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

Описание

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

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

  1. Защита пользователей: Использование скомпрометированных паролей может привести к несанкционированному доступу к учетным записям. Проверка паролей помогает защитить пользователей от таких угроз.
  2. Улучшение безопасности: Это помогает предотвратить использование распространенных и легко угадываемых паролей, что повышает общую безопасность системы.
  3. Соответствие стандартам: Многие стандарты безопасности, такие как 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)  # Уязвимость: пользователь может зарегистрироваться с скомпрометированным паролем

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

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

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

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

  • Всегда проверяйте пароли на наличие в списках скомпрометированных при регистрации, входе в систему и изменении пароля.
  • Используйте надежные API для проверки паролей, такие как "Have I Been Pwned".
  • Обучайте пользователей важности использования уникальных и сложных паролей.
  • Регулярно обновляйте механизмы проверки паролей в соответствии с лучшими практиками безопасности.