Knowledge Base

Safe Active HTTP Method Behavior Check

Safe Active HTTP Method Behavior Check

Категория: Server Hardening · Риск: medium

Safe Active HTTP Method Behavior Check

Что проверяет NodeRoute

NodeRoute отправляет несколько безопасных read-only запросов, чтобы понять, насколько контролируемо сайт обрабатывает стандартные HTTP-механики:

Проверка не отправляет body, формы, credentials, exploit payloads и не меняет состояние сервера.

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

Многие сайты выглядят нормально при обычном `GET`, но ломаются на стандартных служебных запросах, которые используют:

Если `HEAD`, `OPTIONS`, unknown method или `Range` приводят к 5xx, это признак хрупкой edge/backend-цепочки. Если они не падают, но отвечают заметно медленнее обычного ожидания, это тоже полезный сигнал: read-only служебный запрос может попадать в дорогой путь обработки.

Хороший результат

Что считается риском

HEAD вызывает 5xx

Мониторинг может считать сайт недоступным, хотя браузер открывает страницу.

OPTIONS рекламирует PUT/DELETE/PATCH/CONNECT

Это не всегда уязвимость, но расширяет поверхность атаки и показывает, что method allowlist требует проверки.

Unknown method вызывает 5xx

Сайт должен контролируемо отклонять неизвестные методы, а не передавать их в хрупкий backend handler.

Range вызывает 5xx

Маленький Range-запрос не должен ломать сервер. Ошибка может быть в CDN, reverse proxy, static handler или backend.

HEAD или Range отвечают слишком медленно

Это не эксплуатация и не прямой признак взлома. Но если короткий служебный запрос занимает несколько секунд, сайт может хуже проходить мониторинг, health checks, индексацию и короткие всплески bot/read-only traffic.

Как исправить

Nginx method allowlist

if ($request_method !~ ^(GET|HEAD|POST|OPTIONS)$) {
    return 405;
}

HEAD

Убедитесь, что публичные GET-маршруты не блокируют HEAD отдельно.

OPTIONS

Не отдавайте `Allow: PUT, DELETE, PATCH`, если эти методы не нужны на публичном endpoint.

Range

Проверьте обработку `Range` в CDN/reverse proxy и статическом файловом handler. Некорректный Range должен завершаться контролируемо, а не `500/502/503`.

Для динамического HTML проверьте, не запускает ли `Range` полную генерацию страницы. Иногда лучше быстро вернуть обычный `200` или корректный `416/206`, чем тратить ресурсы на полный backend path.

Чего не делает NodeRoute

Связанные проверки