Назад | Перейти на главную страницу

Может ли subdomain.example.com установить файл cookie, который может читать example.com?

Я просто не могу поверить, что это так сложно определить.

Даже прочитав RFC, мне непонятно, может ли сервер subdomain.example.com устанавливать cookie, который может быть прочитан example.com.

subdomain.example.com может установить файл cookie, атрибут домена которого - .example.com. RFC 2965 явно заявляет, что такой файл cookie не будет отправлен на example.com, но в равной степени говорит, что если вы установите Domain = example.com, точка будет добавлена ​​вперед, как если бы вы сказали .example.com. Все вместе это говорит о том, что если example.com возвращает файл cookie с Domain = example.com, он не возвращает этот файл cookie! Это не может быть правдой.

Кто-нибудь может прояснить, какие на самом деле правила?

Цитата из того же RFC2109 ты читаешь:

       * A Set-Cookie from request-host x.foo.com for Domain=.foo.com would
         be accepted.

Так subdomain.example.com может установить cookie для .example.com. Все идет нормально.

       The following rules apply to choosing applicable cookie-values from
       among all the cookies the user agent has.

       Domain Selection
            The origin server's fully-qualified host name must domain-match
            the Domain attribute of the cookie

Так у нас есть совпадение домена?

   * A is a FQDN string and has the form NB, where N is a non-empty name
     string, B has the form .B', and B' is a FQDN string.  (So, x.y.com
     domain-matches .y.com but not y.com.)

Но сейчас example.com не соответствует домену .example.com по определению. Но www.example.com (или любое другое «непустое имя» в домене). Теоретически этот RFC устарел RFC2965, который продиктовал необходимость установки ведущей точки для доменов на Set-Cookie2 операции.

Как отмечает @Tony, более важным является реальный мир. Чтобы получить представление о том, что делают настоящие пользовательские агенты, см.

Firefox 3 nsCookieService.cpp

и

Cookie_monster.cc Chrome

Чтобы понять, что делают реальные сайты, попробуйте поиграть с wget с помощью --save-cookies, --load-cookies, и --debug чтобы увидеть, что происходит.

Вы, вероятно, обнаружите, что на самом деле большинство сайтов используют комбинацию Set-Cookie из более старой спецификации RFC со значениями "Host", неявно без начальной точки (как twitter.com делает) или установка значений домена (с начальной точкой) и перенаправление на сервер, например www.example.com (так как google.com делает).

Если браузер реализует RFC 6265, который на данном этапе должен делать любой современный браузер, то для .example.com будет игнорироваться начальная точка (раздел 5.2.3), а затем cookie будет отправлен в голый домен и во все поддомены.

Не полагайтесь на это поведение, если у вас есть значительный трафик из старых браузеров; этот RFC датируется только 2011 годом.

Это не должно быть возможным. Однако, как вы сказали, поскольку это не широко документированный стандарт, это зависит от того, какое программное обеспечение вы используете.

Большинство современных браузеров придерживаются определенной «модели веб-безопасности». Модель эффективно управляет поведением браузеров в отношении безопасности таких вещей, как файлы cookie (в частности, как они будут отправляться обратно на любой данный веб-сайт). В модели также есть правило, согласно которому «браузеры не отправляют файлы cookie доменным именам, которые их не установили».

При этом domain.com должен иметь возможность устанавливать файлы cookie для js.domain.com. Однако js.domain.com может устанавливать файлы cookie только для себя. Но все зависит от того, какой браузер вы используете.