Может ли сервлет получить идентификатор сеанса HTTPS?

Я хочу создать веб-приложение без сохранения состояния, используя сервлеты Java. Поскольку он не имеет состояния, HttpSession отсутствует. В браузере есть сеанс, но каждый запрос может обрабатываться другим узлом в кластере. Идентификатор сеанса, хранящийся в браузере, генерируется и шифруется сервером, поэтому кому-то очень сложно создать действительный поддельный идентификатор сеанса и обойти логин.

Недавно я обнаружил уязвимость в этой архитектуре: если вредоносный (зараженный) браузер отправляет бандиту идентификатор сеанса, сеанс может быть легко взломан. Я не могу повторно создавать идентификатор сеанса при каждом запросе, потому что на сервере нет сеанса для отслеживания ожидаемой последовательности запросов, и это также усложнило бы обработку асинхронных запросов.

Мое решение на данный момент - получить некоторый идентификатор сеанса HTTPS и включить его в зашифрованный идентификатор сеанса, который хранится в браузере. Может ли стандартный сервлет получить такую ​​информацию от HTTPS-соединения?

Другой вариант - использовать HttpSession только для getId (), но это будет работать, только если такой ID привязан к HTTPS-сеансу, который я не смог найти в спецификации сервлета.

Другие предложения приветствуются.

5
задан fernacolo 7 June 2011 в 17:43
поделиться