Что делает document.domain = document.domain?

JS-компонент на стороне клиента Orbited (сервер Comet) требует, чтобы, если сервер работал в другом домене или порте самого JS, вы выполнили

document.domain = document.domain;

перед загрузкой любого другого JS. (См. Документацию.)

Что это делает? Это похоже на NOOP! (Я проверил, и это на самом деле необходимо.)

4 ответа

Решение

Я на самом деле написал этот код.

При попытке сделать кросс-субдомен / порт кометы, iframe должен иметь такой же document.domain значение в качестве родительского кадра. К сожалению, браузер хранит доменное имя И порт внутри для оригинального document.domain значение. Но геттер и сеттер в javascript ничего не знают о порте. Так что проблема в следующем: если верхний кадр document.domain является ('example.com', 80)и нижняя рамка ('comet.example.com', 80)Как вы получаете нижнюю рамку, чтобы быть ('example.com', 80) также?

Вы не можете, так как изменение части имени хоста обязательно приведет к установке порта на nullтак что лучшее, что вы можете сделать, это ('example.com', null) в нижней рамке. Таким образом, верхний кадр также должен быть установлен на это значение, и настройка document.domain=document.domain делает именно это. Изменяет внутреннее представление в браузере с ('example.com', 80) в ('example.com', null) и затем все совпадает, и связь между портами / поддоменами работает.

Браузеры различают (a) document.domain, если явно не установлено, и (b) document.domain, если явно установлено... даже если они возвращают одно и то же значение.

Явная установка значения указывает на намерение "сотрудничать" со сценарием в другом поддомене (в том же родительском домене).

Если ОБА родительская страница И внешний сценарий явно устанавливают для document.domain одно и то же значение, ограничение политики того же источника может быть обойдено, и каждый сценарий может получить доступ ко всем (иным образом ограниченным) объектам и свойствам контекстов друг друга.

На этом сайте я нашел следующую информацию: devguru. Более конкретно, вот цитата:

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

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

Я бы предположил, что если вы не трогаете document.domain, движок js разрешает только другие javascript-файлы из того же домена. С этим свойством вы сможете развертывать в других поддоменах, таких как состояние орбитальной документации.

document.domain извлекает значение по умолчанию из фактического URL, если явно не установлено. Браузеры будут записывать, если document.domain пришел по умолчанию из URL или если он был явно установлен. Оба должны быть по умолчанию для одного и того же домена или оба должны быть явно установлены на один и тот же домен, чтобы это работало. Если одно задано по умолчанию и одно задано явно, оба совпадают, если прочитаны, двум страницам по-прежнему будет запрещено разговаривать друг с другом.

Смотрите: https://developer.mozilla.org/en-US/docs/DOM/document.domain

Другие вопросы по тегам