Почему мой заголовок ответа "Set-Cookie" не переводится в настоящий файл cookie? - PullRequest
0 голосов
/ 11 мая 2018

Я использую Java 8, Wildfly 11, Spring 4 и Apache 2.4. У меня есть этот код Java, который устанавливает cookie сеанса

cookie = new Cookie(SESSION_ID_KEY, sessionId);
...
final String domain = request.getServerName().indexOf(".") == -1 ? request.getServerName() : request.getServerName().substring(request.getServerName().indexOf(".") + 1, request.getServerName().length());
if (!StringUtils.equals(domain, "localhost") && !isIpAddress)
{
            cookie.setDomain(domain.indexOf('.') > -1 ? "." + domain : domain);
}   // if
final String contextPath = request.getContextPath() != null && request.getContextPath().endsWith("/") ? request.getContextPath().substring(0, request.getContextPath().length() - 1): request.getContextPath();
cookie.setPath(contextPath);
System.out.println("setting domain " + domain + " and context path:" + contextPath);
response.addCookie(cookie);

Я заметил, что в моем браузере этот cookie не создается. Затем я заглянул в «Почтальон» и заметил, что файлы cookie не создаются, хотя я вижу эти заголовки ответов ...

Set-Cookie →MY.SESSION.ID=10c25010534c4dd3900851ec1dfaebeb; path=/context; domain=.compute-1.amazonaws.com
Set-Cookie →closeTrialNoteDialog=""; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:00 GMT

Может показаться, что когда cookie не создается, заголовок ответа по-прежнему содержит этот заголовок Set-Cookie. Я не могу сказать, что не так с любым из вышеперечисленного, однако, это помешало бы созданию куки. Любое понимание приветствуется,

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Ваша проблема в том, что вы пытаетесь установить экземпляр Cookie для Amazon EC2. С одной стороны, это невозможно, поскольку, как уже упоминалось, это часть общедоступных суффиксов, а по соображениям безопасности вы не можете этого сделать.

С другой стороны, это не имеет смысла, потому что этот публичный адрес: "ec2-27-123-206-78.compute-1.amazonaws.com/context/login" является динамическим и не является фиксированным для вас , Это DNS-прокси, который в настоящее время зарезервирован для вас. Если вы хотите установить куки из экземпляра EC2, вы должны установить доменные имена ваших собственных имен хостов, которые находятся перед экземплярами EC2.

request.getServerName ()

Это дает вам текущее имя сервера EC2. Но, например, если вы прокси-запросы с nginx, вы должны получить заголовок 'Host' ( 1 , 2 ).

0 голосов
/ 19 мая 2018

Домены cookie должны быть частными доменами, специфичными для вашей организации, а не публичными доменами, используемыми во многих организациях.

В этом случае используемый вами домен AWS, .compute-1.amazonaws.com, не устанавливается, так как браузеры считают его публичным доменом, который известен как «Эффективный домен верхнего уровня (eTLD)», «Расширенный верхний уровень». Домен »и« Общественный суффикс ». Общие домены верхнего уровня (TLD) включают в себя «общие TLD» (gTLD), такие как .com, .net и .org и «TLD с кодом страны» (ccTLD), такие как .us и .uk. Благодаря общедоступному облаку браузеры теперь также считают популярные общие облачные домены «эффективными TLD», включая ряд доменов от AWS, например, тот, который вы пытаетесь использовать.

Чтобы установить cookie-файл, вам необходимо установить для своего домена cookie частный домен, который Google называет «Эффективный домен верхнего уровня плюс один» (eTLD + 1), что означает ваш эффективный домен верхнего уровня плюс один поддомен, например, ваше полное имя хоста в этом случае - ec2-27-123-206-78.compute-1.amazonaws.com. Microsoft использует термин «Общественный суффикс плюс один» (PS + 1) для того же требования.

Основание Mozilla для исключения eTLD / общественного суффикса

  • Избегайте «супер-печенья», наносящего ущерб конфиденциальности, для суффиксов доменных имен высокого уровня
  • Выделите наиболее важную часть доменного имени в пользовательском интерфейсе
  • Точная сортировка записей истории по сайту

Обоснование Microsoft для исключения eTLD / общедоступного суффикса

При настройке cookie-файлов веб-сайт может указывать, на какие хосты следует отправлять cookie-файлы, используя атрибут домена. Браузер должен блокировать попытки установить cookie-файл, если атрибут домена не заканчивается личным доменом текущей страницы. Невыполнение этого требования приводит к проблемам конфиденциальности и безопасности.

  • Конфиденциальность. Разрешение совместного использования файлов cookie несвязанными доменами может привести к появлению «супер-файлов cookie» - файлов cookie, которые отправляются нескольким несвязанным организациям, которые совместно используют общий суффикс.
  • Безопасность: Атаки с фиксацией сеанса, когда хороший сайт и злой сайт используют общий суффикс, а злой сайт устанавливает вредоносный файл cookie для общего суффикса, так что хороший сайт отправляет злой файл cookie.

Google Chromium / Chrome Behavior

Google указывает, что Chromium (и, следовательно, Chrome) хранит файлы cookie, используя «eTLD + 1» в описании своего класса CookieMonster.

Центральной структурой данных CookieMonster является член cookie_, представляющий собой мультикарту (допускается несколько значений для одного ключа) из домена в некоторый набор файлов cookie. Каждый файл cookie представлен функцией CanonicalCookie (), которая содержит всю информацию, которая может быть указана в файле cookie (см. Схему и RFC 2695). Если установлено, файлы cookie помещаются в эту структуру данных, а поиск включает поиск в этой структуре данных. Ключом к этой структуре данных является наиболее инклюзивный домен (суффикс с самой короткой точкой с разделителями) домена cookie, который не называет регистратора домена (то есть «google.com» или «bbc.co.uk», но не «co.uk»). "или" ком "). Это также называется эффективным доменом верхнего уровня плюс один или eTLD + 1, для краткости.

Список доменов, включая amazonaws.com

Вы можете увидеть список эффективных доменов верхнего уровня, используемых Firefox, в его исходном коде, опубликованном на Mozilla PublicSuffix.org. Страница Google CookieMonster также ссылается на PublicSuffix.org. Этот список включает в себя несколько доменов AWS, включая тот, который вы пытаетесь использовать для EC2, представленный Amazon.

// Amazon Elastic Compute Cloud : https://aws.amazon.com/ec2/
// Submitted by Luke Wells <psl-maintainers@amazon.com>
*.compute.amazonaws.com
*.compute-1.amazonaws.com
*.compute.amazonaws.com.cn
us-east-1.amazonaws.com

Примечание: я только что заметил, что saurav kumar разместил ссылки Mozilla на это в комментарии.

0 голосов
/ 14 мая 2018

Если заголовок ответа содержит set-cookie, файл cookie должен быть создан. Попробуйте удалить set-domain, пусть он по умолчанию. Также попробуйте установить максимальный возраст.

...