Подтвердить что ты не робот

Доступ к файлам cookie с перекрестным доступом (или сеансом)

Хотя я понимаю, что это, как правило, связано с атаками сценариев межсайтового сценария, мне интересно, как сеанс может оставаться действительным во многих поддоменах, принадлежащих одному домену (например: пользователь регистрируется только один раз и может для доступа к subdomain1.domain.com и subdomain2.domain.com с тем же сеансом). Наверное, мне сначала нужно понять, как это работает, но до сих пор мне не удалось найти много того, что было бы актуальным.

Но опять же, может быть, я не задал правильный вопрос.

Заранее спасибо:)

4b9b3361

Ответ 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