Успешный OPTIONS ещё не доказывает, что основной ответ пройдёт проверку CORS и будет доступен сценарию.
Предварительный запрос CORS
Определение
Предварительный запрос CORS — запрос OPTIONS, которым браузер до основного запроса проверяет, разрешены ли для другого источника нужные метод и заголовки.
Также ищут: CORS preflight · preflight request · OPTIONS preflight
Зачем это знать
Он заранее показывает условия межсайтового обращения, но простые запросы обходятся без него, поэтому сервер должен отдельно проверять каждое действие.
Карта понятия
Что подтверждено
Браузер отправляет OPTIONS с Origin, Access-Control-Request-Method и при необходимости Access-Control-Request-Headers, затем проверяет ответ CORS.
Граница применимости: Алгоритм предварительной проверки CORS.
Не все запросы браузера требуют предварительной проверки, поэтому она не заменяет общую защиту от CSRF и проверку прав доступа.
Граница применимости: Различие между предварительной проверкой CORS и проверкой прав.
Предварительная проверка CORS согласует метод и заголовки, а не входит в сеанс пользователя: межисточниковый OPTIONS по алгоритму стандарта получения ресурсов браузером не передаёт учётные данные приложения другому источнику. Проверка прав основного запроса остаётся отдельной.
Граница применимости: Нормативный алгоритм получения ресурсов браузером; различия реализаций транспорта, включая клиентские сертификаты TLS, не описываются.
Разрешение предварительной проверки может храниться в специальном кеше браузера. Повторное использование этого разрешения не освобождает приложение от проверки действующего сеанса и прав основного запроса.
Граница применимости: Разделение кеша протокола CORS и текущей авторизации API.
Если запрос требует предварительной проверки и она не прошла, браузер не отправляет соответствующий основной запрос в этом выполнении алгоритма получения ресурсов. Это не означает, что любой запрос к тому же адресу обязательно проходит предварительную проверку.
Граница применимости: Основной запрос, обусловленный успешной предварительной проверкой; простой запрос и независимый клиент — другие случаи.
Не путать
OPTIONS согласует протокол браузера. Токен CSRF проверяется приложением для предусмотренного изменяющего запроса и не равен этому согласованию.
Что проверить
- Определите, требуется ли предварительная проверка данному запросу.
- Разрешите только необходимые методы и заголовки.
- Не считайте OPTIONS аутентифицированным действием пользователя.
- Проверяйте права основного запроса даже при действующем кеше CORS.
- Проверьте отдельные заголовки CORS основного ответа.
- При сбое определите, был ли основной запрос вообще отправлен.
- Не заменяйте согласованием CORS серверную защиту от CSRF.
Первоисточники
- Fetch Standard
Определяет CORS protocol, credentials modes, allowed origins и CORS-preflight fetch через OPTIONS.
- Cross-Site Request Forgery Prevention Cheat Sheet
Разводит CSRF tokens, SameSite и origin checks и задаёт свойства synchronizer и signed double-submit tokens.
Утверждения: 02
- Guidelines for API Protection for Cloud-Native Systems
Задаёт API lifecycle controls для authentication, authorization, rate limits, resource limits, logging и monitoring.
Утверждения: 04
- Fetch Standard
Определяет CORS protocol, credentials modes, allowed origins и CORS-preflight fetch через OPTIONS.
Утверждения: 05
- The Web Origin Concept
Определяет origin как scheme, host и port и описывает origin-based browser isolation model.