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

Проверка использования белых списков для значений заголовка Origin

Описание

Это требование подразумевает, что приложения должны использовать белые списки (whitelists) для проверки допустимых значений заголовка Origin в HTTP-запросах. Это помогает предотвратить атаки, такие как межсайтовая подделка запросов (CSRF), и обеспечивает безопасность данных, ограничивая доступ к ресурсам только с доверенных источников.

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

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

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

Определение белого списка значений заголовка Origin: Создайте список допустимых доменов для заголовка Origin.

Пример (проверка заголовка Origin в Python с использованием Flask):

from flask import Flask, request, abort

app = Flask(__name__)

# Определение белого списка доменов
ALLOWED_ORIGINS = ['https://trusted-domain.com', 'https://another-trusted-domain.com']

@app.route('/api/resource', methods=['POST'])
def api_resource():
    origin = request.headers.get('Origin')
    if origin not in ALLOWED_ORIGINS:
        abort(403)  # Доступ запрещен
    return "Resource accessed successfully."

if __name__ == '__main__':
    app.run()

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

Пример (отправка запроса с заголовком Origin с использованием JavaScript):

fetch('https://your-api.com/api/resource', {
    method: 'POST',
    headers: {
        'Origin': 'https://trusted-domain.com',
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({ data: 'example' })
})
.then(response => {
    if (response.ok) {
        return response.json();
    }
    throw new Error('Network response was not ok.');
})
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

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

# Пример уязвимого кода на Python
@app.route('/api/resource', methods=['POST'])
def api_resource():
    # Отсутствие проверки заголовка Origin
    return "Resource accessed successfully."

Проблема: Отсутствие проверки заголовка Origin позволяет злоумышленникам отправлять запросы от имени пользователя, что может привести к CSRF-атакам.

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

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

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

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