Проверка CORS и Security Headers
Анализ CORS-политики (Access-Control-Allow-Origin), Preflight-запросов, а также всех заголовков безопасности: CSP, HSTS, X-Frame-Options и других.
Введите URL и нажмите «Проверить».
Настройка CORS
Что такое CORS?
CORS (Cross-Origin Resource Sharing) — механизм, который позволяет серверу разрешить загрузку ресурсов с других доменов. Браузер блокирует cross-origin запросы, если сервер не отправит правильный заголовок Access-Control-Allow-Origin.
Пример: ваш фронтенд на app.example.com делает fetch к API на api.example.com. Без CORS браузер заблокирует запрос.
Nginx
location /api/ {
# Разрешить конкретный источник (без credentials можно *)
add_header Access-Control-Allow-Origin "https://app.example.com" always;
# Разрешённые методы
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
# Разрешённые заголовки
add_header Access-Control-Allow-Headers "Content-Type, Authorization, X-Requested-With" always;
# Заголовки, доступные JS-клиенту
add_header Access-Control-Expose-Headers "Content-Length, X-Request-Id" always;
# Передача кук и авторизации (нельзя вместе с Allow-Origin: *)
add_header Access-Control-Allow-Credentials "true" always;
# Кэширование preflight-ответа (в секундах)
add_header Access-Control-Max-Age "86400" always;
# Обработка preflight (OPTIONS)
if ($request_method = OPTIONS) {
return 204;
}
}
Директива always — заголовок отправляется всегда, включая ответы с кодами 4xx/5xx.
Безопасность CORS
- Не используйте
Access-Control-Allow-Origin: *если передаются cookie или авторизация.*не работает сallowCredentials: true. - Явно перечисляйте разрешённые источники — не используйте динамическое отражение Origin без валидации (риск атак).
- Ограничивайте методы — не разрешайте PUT/DELETE если API только читает данные.
- Preflight кэширование — ставьте
Access-Control-Max-Ageчтобы браузер не слал OPTIONS перед каждым запросом. - Expose-Headers — без этого заголовка JS-клиент не увидит кастомные заголовки ответа.
- Vary: Origin — при динамическом Allow-Origin добавляйте
Vary: Originдля корректного кэширования.