Доступ к файлам cookie с перекрестным доступом (или сеансом)
Хотя я понимаю, что это, как правило, связано с атаками сценариев межсайтового сценария, мне интересно, как сеанс может оставаться действительным во многих поддоменах, принадлежащих одному домену (например: пользователь регистрируется только один раз и может для доступа к subdomain1.domain.com и subdomain2.domain.com с тем же сеансом). Наверное, мне сначала нужно понять, как это работает, но до сих пор мне не удалось найти много того, что было бы актуальным.
Но опять же, может быть, я не задал правильный вопрос.
Заранее спасибо:)
Ответы
Ответ 1
Сеансы Inproc не могут оставаться действительными, однако вы можете закодировать свое веб-приложение, чтобы разрешить куки файлы через несколько поддоменов. Вам нужно будет установить домен равным:
Response.Cookies("CookieName").Domain = ".mydomain.com"
Помните период.
Ответ 2
Существует несколько способов совместного использования данных сеанса или данных cookie в доменах. Самое простое - разделить его на стороне сервера через общий хранилище данных. Но вы не задавали бы этот вопрос, если бы это было так легко.
Другой способ сделать это одинаково прост. В домене one.com
содержатся некоторые данные сеанса, скажем name=aleem
и id=123
, и он хочет передать это вместе с two.com
. Он выполнит следующие действия:
- Вызовите
two.com/api/?name=aleem&id=123
- Когда
two.com
получает данные через параметры запроса, он создает файл cookie с данными. Этот файл cookie будет храниться в домене two.com
.
-
two.com
затем перенаправит обратно на REFERER
, который в этом случае будет one.com
Это упрощенный сценарий. Домен two.com
должен иметь возможность доверять one.com
, и не только это, но он должен знать, что запрос аутентичен, а не просто создан пользователем, поэтому вам нужно использовать общедоступные/закрытые ключи для смягчения этого.
Ответ 3
По умолчанию все куки для сайта хранятся вместе на клиенте, и все файлы cookie отправляются на сервер с любым запросом на этот сайт. Другими словами, каждая страница на сайте получает все файлы cookie для этого сайта. Однако вы можете установить область файлов cookie двумя способами:
- Ограничьте объем файлов cookie на папку на сервере, что позволяет ограничить использование файлов cookie для приложения на сайте.
- Задайте область для домена, которая позволяет указать, какие поддомены в домене могут получить доступ к файлу cookie.
Вы можете узнать больше здесь.
Ответ 4
Комментарии о том, что файл cookie установлен для домена, чтобы позволить поддоменам получать этот файл cookie, дает вам эту сторону, но недостающая последовательность сеанса.
Я думаю, что это очень похоже на проблему сохранения состояния на серверах в ферме, и решение, вероятно, должно гарантировать, что ваше хранилище сеансов согласовано на обоих сайтах (если они не являются серверами с одного и того же "веб-сайта" в IIS). Вы можете переместить хранилище сеансов в SQL Server (КАК: настроить SQL Server для хранения состояния сеанса ASP.NET), который, вероятно, будет служить цели так как каждый сайт будет запрашивать один и тот же магазин при поиске данных сеанса, связанных с файлом cookie, с которым они были представлены.
Я надеюсь, что вы попадете на правильный путь.
Ответ 5
Если у вас есть возможность настроить общий поддомен, вы можете сделать это:
В ваших файлах html поддомена включите файл javascript вверху, как это:
<script src="http: //common.domain.com/check.asp"></script>
В check.asp найдите файл cookie logged_in, а если нет, покажите страницу, http://common.domain.com/login.asp, используя что-то вроде
<%
if (cookie_not_found){
%>
location.href = "http: //common.domain.com/login.asp";
<%
}
%>
Как только человек отправит пароль пользователя, отправьте его обратно в тот же login.asp и установите cookie сеанса (который будет установлен в домене common.domain.com), а затем перенаправлены на http://subdomain1.domain.com
.
Что произойдет сейчас, будет сделан вызов встроенного "common.domain.com/check.asp", и файлы cookie для common.domain.com будут отправлены браузером вместе с запросом. Таким образом, вы узнаете, действителен ли ваш сеанс или нет, даже если вы находитесь в subdomain1.domain.com.
Ответ 6
Вы можете установить cookie для определенного домена.
В php метод setCookie() содержит параметр, в котором вы можете указать домен верхнего уровня, поэтому cookie действителен для всех поддоменов. По вашим тегам, я вижу, вы работаете в asp.net. Вероятно, это также существует для asp...
после небольшого поиска asp:
попробуйте следующее:
Response.Cookies("CookieName").Domain = ".mydomain.com"
или прочитайте this
Ответ 7
Вот решение, которое работает:
http://anantgarg.com/2010/02/18/cross-domain-cookies-in-safari/