Значения заголовка Origin находятся в белом списке
Описание
Это требование подразумевает, что приложение должно проверять значения заголовка Origin и разрешать доступ только из доверенных источников. Это помогает предотвратить атаки, такие как межсайтовый запрос (CSRF), позволяя серверу отклонять запросы из ненадежных источников.
Почему это важно
- Защита от CSRF-атак: Проверка заголовка 
Originпомогает предотвратить выполнение неблагонадежных запросов от злоумышленников, которые могут попытаться обмануть пользователей и заставить их выполнить нежелательные действия. - Контроль доступа: Белый список значений заголовка 
Originпозволяет серверу точно определять, какие источники имеют право взаимодействовать с приложением, что повышает безопасность. - Устойчивость к атакам: Ограничение доступа на основе проверенных источников снижает риски, связанные с несанкционированным доступом к ресурсам приложения.
 - Соблюдение стандартов безопасности: Многие стандарты и рекомендации по безопасности требуют проверки заголовков 
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-атак, позволяя злоумышленникам отправлять нежелательные запросы.
Причины, к которым может привести несоблюдение требования
- Уязвимость к CSRF-атакам: Неограниченный доступ позволяет злоумышленникам обманывать пользователей и заставлять их выполнять нежелательные действия.
 - Нарушение конфиденциальности данных: Утечка данных может произойти, если несанкционированные источники получат доступ к ресурсам приложения.
 - Проблемы с соблюдением стандартов безопасности: Несоблюдение правил может привести к юридическим последствиям и штрафам.
 
Рекомендации
- Определите и поддерживайте белый список доверенных источников для заголовка 
Origin. - Регулярно проверяйте и обновляйте список разрешенных источников в соответствии с изменениями в вашем приложении.
 - Обучите разработчиков важности проверки заголовка 
Originи его роли в безопасности веб-приложений. - Рассмотрите возможность использования инструментов для мониторинга и аудита заголовков запросов для выявления потенциальных уязвимостей.