Значения заголовка 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
и его роли в безопасности веб-приложений. - Рассмотрите возможность использования инструментов для мониторинга и аудита заголовков запросов для выявления потенциальных уязвимостей.