Флаг безопасности не отображается для файлов cookie JSESSIONID

#amazon-web-services #spring-security

#amazon-web-services #spring-безопасность

Вопрос:

Приложение развернуто в AWS и обслуживает порт 80, а ELB перенаправляет эти 80 на 443. Spring security используется для сеанса, который создает файл cookie с установленным флагом безопасности. Когда я нажал на имя хоста приложения, я увидел, что флаг безопасности установлен, как показано ниже.

curl -I target_hostname

Set-Cookie: JSESSIONID=XXXXXXXX; Path =/; Secure; HttpOnly

Но когда я напрямую нажимаю на EC2 IP (используя curl) Я мог видеть, что флаг безопасности не установлен.

curl -I target_ec2_ip

Установить файл cookie: JSESSIONID=XXXXXXXX; Путь =/; HttpOnly

Почему это происходит, кто-нибудь может объяснить?

Комментарии:

1. Когда я нажимаю на приложение, используя IP-адрес из браузера, я вижу файл cookie в chrome developer tool, который небезопасен, но когда я нажимаю на приложение, используя имя хоста, я вижу, что флаг безопасности установлен. Я использую spring security. Есть предложения.

Ответ №1:

Я собираюсь предположить, что вы завершаете SSL в ELB и связываетесь с экземпляром EC2 напрямую через HTTP (порт 80). В этом случае применяется следующее:

RFC 6265:

Если флаг cookie-файла «только безопасный» имеет значение true, то схема запроса uri должна обозначать «безопасный» протокол (как определено агентом пользователя).

ПРИМЕЧАНИЕ: Понятие «защищенного» протокола в этом документе не определено. Обычно агенты пользователей считают протокол безопасным, если в нем используется защита транспортного уровня, такая как SSL или TLS.

Документ MDN более четкий:

Небезопасные сайты (http:) больше не могут устанавливать файлы cookie с помощью директивы «secure» (новое в Chrome 52 и Firefox 52 ).

Комментарии:

1. То есть вы имеете в виду, что даже если флаг безопасности установлен, он не появится в описанном выше сценарии? Также в этом случае файл cookie может быть украден атакой MITM. Как это предотвратить?