Можно ли установить cookie для сайта / сервера, отличного от вашего? - PullRequest
2 голосов
/ 30 января 2009

Вот быстрая версия моего вопроса:

Можно ли каким-либо образом установить cookie в браузер клиента, когда cookie используется для другого сервера (в данном случае почтового сервера Exchange)? В этом сценарии сервер, пытающийся установить cookie, находится по адресу "intranet.myschool.edu", а сервер обмена - по адресу "owa_server.myschool.edu".


Вот полный вопрос:

У меня есть скрипт php, который использует cURL для отправки HTTP POST на наш сервер Exchange, на котором включена аутентификация на основе форм.

Когда я успешно выполняю HTTP POST (который включает в себя пользователя / пароль в опубликованном URL), сервер Exchange (или, более конкретно, файл https://my.school.edu/exchweb/bin/auth/owaauth.dll) выводит файлы cookie. В частности, он выводит идентификатор «sessionid» и «cadata».

С этими идентификаторами cookie, записанными в текстовый файл на сервере, cURL / PHP может ссылаться на него и затем запрашивать данные (через webdav и т. Д.) С сервера Exchange / OWA.

Эта часть работает. Проблема, которую я хотел бы решить, теперь передает идентификаторы cookie в браузер клиентов, чтобы они могли использовать эти идентификаторы cookie для автоматического входа в свою учетную запись OWA.

По сути, я бы хотел, чтобы наши пользователи входили в нашу интрасеть со своими идентификаторами Active Directory и видели снимок своих последних электронных писем. Затем, если им нужно, я бы дал им небольшую ссылку, чтобы переключиться на полноценное веб-приложение OWA. Когда происходит это переключение, я не хочу, чтобы им приходилось входить в OWA вручную. Поскольку они уже представили свои имя пользователя и пароль Active Directory в передней части интрасети, я бы хотел, чтобы они автоматически вошли в OWA.

Следует отметить, что использование аутентификации Windows для попытки единого входа невозможно, поскольку у нас есть смесь Mac OS, Windows и Linux.

Я думал, что смогу сделать "setcookie", назначить идентификаторы cookie, которые получил cURL, и поместить их в браузер клиентов.

Разве это не возможно? Разве нельзя «подделать» Exchange / OWA (или любой другой сайт) таким способом. У меня есть законные идентификаторы файлов cookie, записанные cURL. Нет ли способа передать их клиентскому браузеру на другом компьютере?

В худшем случае будет ли моя единственная надежда использовать Javascript для автоматической вставки имени пользователя и пароля на страницу входа в OWA? У кого-нибудь есть другие идеи, как избежать проблемы двойного входа в систему с Exchange / OWA?

Спасибо за предоставленную помощь!

Ответы [ 7 ]

5 голосов
/ 30 января 2009

С RFC 2965 (NB HDN = "имя домена хоста)

Имя хоста A соответствует домену хоста B если

  *  their host name strings string-compare equal; or

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

Обратите внимание, что сопоставление доменов не является коммутативная операция: a.b.c.com
доменные совпадения .c.com, но не задний ход.

Таким образом, использование .myschool.edu в качестве домена должно работать. NB ведущий. необходимо

3 голосов
/ 30 января 2009

Вы можете иметь возможность установить cookie с частью домена .myschool.edu. Теоретически он затем отправляется на любой другой сайт, размещенный в поддомене «myschool.edu».

На практике, однако, ваше клиентское программное обеспечение может решить, что область действия cookie слишком широка, и отказаться от его отправки обратно.

1 голос
/ 30 января 2009

В этом сценарии сервер, пытающийся установить cookie, находится по адресу "intranet.myschool.edu", а сервер обмена - по адресу "owa_server.myschool.edu".

Вы должны быть в состоянии сделать это.

Я делаю это на своем сайте (который я буду менять для целей примера):

У меня есть веб-приложение по URL

webapp.domain.com

И когда пользователи входят в систему, я устанавливаю куки-файл пакета форума PunBB, который находится по адресу:

forum.domain.com

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

Все, что вам нужно сделать, это войти в поддомен # 1, чтобы установить путь к cookie-файлам "/" (по умолчанию) и установить домен cookie-файлов на "domain.com". Тогда ваше приложение в поддомене # 2 должно увидеть cookie.

РЕДАКТИРОВАТЬ: я вижу, barrowc ответил, я видел шаблон ".domain.com" в некоторых примерах, мой сайт использует "domain.com" для домена cookie, и он тоже работает ( может быть, php set_cookie добавляет начальную точку, если она отсутствует? *

1 голос
/ 30 января 2009

Я думаю, это было бы серьезной лазейкой в ​​безопасности, если бы это было возможно ...

0 голосов
/ 06 ноября 2009

Мы боролись с этим в течение нескольких месяцев, лучшее, что мы можем придумать, - позволить веб-серверу получать куки для Exchange при КАЖДОМ ЛОГИНЕ. проблема в том, что без привязки к cookie у нас нет способа убедиться, что cookie, полученный веб-сервером, пришел с того же узла балансировки нагрузки, к которому подключается клиент.

0 голосов
/ 31 января 2009

вы можете использовать iframe для установки cookie, т.е. иметь на своем веб-сервере iframe, который отправляет запрос на страницу на вашем http-сервере Exchange (https://my.school.edu/exchweb/) с заданными переменными требуемого файла cookie в качестве переменных get или post. затем используйте переменные для установки файла cookie для этого домена, и перенаправить пользователя на сервер обмена.

теперь на бэкэнде OWA может быть логика, которая проверяет IP-адрес, пользовательский агент и т. Д. .... при регистрации сеанса, который может сделать это недействительным ..... не уверен

0 голосов
/ 30 января 2009

Ваш браузер может решить, что ... но обычно нет, вы не можете. Это считается типом уязвимости XSS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...