Если я получаю запрос к URL host.com/site-directory/page-slug.html?session={someValidNonExpiredSessionGuid}
и обнаруживаю файл cookie сеанса со значением: {someOtherValidNonExpiredSessionGuid}
, то
Какой сеанс является правильным сеансом, который нужно связать с запросом?
Вот несколько предысторий:
Шаблон, который я использую для поддержания состояния в HTTP-запросах, заключается в сохранении уникального идентификатора в строке запроса, коллекции форм и / или cookie.Затем при каждом запросе я нахожу уникальный идентификатор и дату извлечения из таблицы базы данных.Если идентификатор недействителен или сеанс истек, будет создан новый сеанс (с новым идентификатором, новым файлом cookie и т. Д.).
Поведение по умолчанию состоит в том, что все формы будут иметь поле:
<input type="hidden" name="session" value="{someGuid}" />
Все ссылки на другие страницы сайта будут иметь добавленный параметр строки запроса
<a href="site-directory/page-slug.html?session={someGuid}">a sample link</a>
И, если устройство просмотра пользователя поддерживает файлы cookie, будет установлен файл cookie, имеющий сеансзначение.
Если я подтвердил, что устройство просмотра пользователя поддерживает файлы cookie, тогда моей форме и строке запроса больше не потребуется поле / параметр идентификатора сеанса.
Однако у меня концептуальная концепция.проблема при принятии решения о том, должен ли параметр сеанса строки запроса иметь приоритет над значением cookie или наоборот.Кажется, что я мог бы получить плохие данные в любом случае.Я мог бы получить данные с неверным параметром строки запроса, если бы пользователь добавил в закладки страницу с параметром сеанса, включенным в URL.Я также мог бы получить неверные данные из cookie, если пользователь закрывает браузер, не завершая сеанс, и окно истечения сеанса еще не закрылось.Также кажется, что оба варианта могут быть уязвимы для злоумышленника, перехватывающего запрос и отправляющего запрос с той же информацией о сеансе.
Итак, еще раз, мой вопрос
Если я получузапрос к URL host.com/site-directory/page-slug.html?session={someValidNonExpiredSessionGuid}
, и я обнаружил файл cookie сеанса со значением: {someOtherValidNonExpiredSessionGuid}
, затем Какой сеанс является правильным сеансом, который нужно связать с запросом?
Я склоняюсь ксеанс cookie, потому что кажется, что наиболее распространенным сценарием будет закладка с включенным сеансом.Я уже решил, что данные публикации формы должны иметь наибольший приоритет, потому что страница всегда будет отображать форму с правильным идентификатором, и единственно возможная ситуация с неправильным, не просроченным идентификатором - это очень быстро осуществляемая атака XSS,который можно обойти, включив поле маркера защиты от подделки в области запроса.
В дополнение к основному вопросу, я ценю любое понимание любых связанных с безопасностью или логических упущений, которые я выразил в этом описании. Прошу прощения за длинный пост, но посчитал необходимым объяснить ситуацию.Большое спасибо за ваш вклад.
Кроме того, это не обязательно относится к вопросу, но в большинстве случаев я использую ASP.NET MVC и вручную устанавливаю файлы cookie с помощью Response.Cookies
.