Генерация собственного идентификатора сессии в JSF - PullRequest
0 голосов
/ 19 октября 2011

У меня есть веб-приложение, в котором мы используем фреймворк JSF.Я углубился в вопросы безопасности для веб-приложения и, следовательно, я хотел создать свой собственный уникальный идентификатор сеанса (используя алгоритм шифрования и назначать его каждому новому сеансу, который создается после входа пользователя в систему.

МожетКто-нибудь, пожалуйста, сообщите мне, как установить сессионный идентификатор сессии в сеансе и с каждым запросом передавать идентификатор сессии.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 19 октября 2011

Я действительно сомневаюсь, что вы сгенерируете идентификаторы сеансов, которые более безопасны, чем идентификаторы, сгенерированные контейнером, но вот что вы могли бы сделать, не используя какое-либо расширение для конкретного контейнера.

Создать фильтр сервлета, который перехватывает каждый запрос к серверу.

Когда приходит запрос, проверьте, существует ли уже сеанс для этого запроса (используя getSession(false)). Если он существует, извлеките из запроса ваш конкретный файл cookie MY_SESSION_ID и сравните его значение с тем, которое хранится в сеансе. Если они не совпадают, отклоните запрос.

Если сеанс не существует, то создайте его (используя getSession(true)), сгенерируйте супер-безопасный идентификатор сеанса, сохраните его как атрибут сеанса и добавьте cookie MY_SESSION_ID в ответ.

Недостатком является автоматическое создание сеанса, даже если он не является строго обязательным. Но в большинстве случаев это происходит при использовании JSP компонентных структур.

1 голос
/ 19 октября 2011

Попытка сделать это на прикладном уровне JSF вряд ли будет успешной; Я бы выполнил эту задачу на более низком уровне API. Я предполагаю, что контейнер сервлетов.

Я могу придумать два подхода:

  1. сделать это на уровне контейнера через SPI для конкретного сервера (если он вообще существует)
  2. сделать это, переписав запросы / ответы через сервлет Фильтр

Недостаточно информации, чтобы прокомментировать жизнеспособность первого подхода.

Во втором случае вам нужно будет определить имя файла cookie сеанса (обычно это JSESSIONID, но не обязательно). Ваш API будет:

  1. сопоставить фильтр со всеми запросами приложений
  2. поддерживает отображение идентификаторов сеансов контейнеров на "защищенные" идентификаторы
  3. использовать фильтр для перезаписи любого файла cookie сеанса в запросе с идентификатором сеанса
  4. использовать фильтр перезаписи любого сеансового куки в ответе с защищенным идентификатором
  5. используйте listener , чтобы удалить недопустимые сеансы с карты, чтобы избежать утечек памяти
...