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

Значения заголовка Origin находятся в белом списке

Описание

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

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

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

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

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

Пример (проверка заголовка Origin в PHP):

$allowed_origins = ['https://trusted-site.com', 'https://another-trusted-site.com'];

if (isset($_SERVER['HTTP_ORIGIN'])) {
    $origin = $_SERVER['HTTP_ORIGIN'];
    if (in_array($origin, $allowed_origins)) {
        // Разрешить запрос
        header('Access-Control-Allow-Origin: ' . $origin);
    } else {
        // Отклонить запрос
        header('HTTP/1.1 403 Forbidden');
        exit('Access denied');
    }
}

Использование middleware для проверки заголовка Origin: В веб-фреймворках можно использовать middleware для централизованной проверки заголовков Origin.

Пример (использование middleware в Node.js с Express):

const allowedOrigins = ['https://trusted-site.com', 'https://another-trusted-site.com'];

const originCheckMiddleware = (req, res, next) => {
    const origin = req.headers.origin;
    if (allowedOrigins.includes(origin)) {
        res.setHeader('Access-Control-Allow-Origin', origin);
        next();
    } else {
        res.status(403).send('Access denied');
    }
};

app.use(originCheckMiddleware);

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

// Пример уязвимого кода на JavaScript
app.post('/api/resource', (req, res) => {
    // Не проверяем заголовок Origin
    // Уязвимость: любой сайт может отправить запрос и получить доступ к ресурсу
    res.send('Resource accessed');
});

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

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

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

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

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