Что мешает украсть идентификатор HttpSession? - PullRequest
6 голосов
/ 11 ноября 2010

Что делается в API сервлетов Java, чтобы гарантировать, что чей-то идентификатор сеанса не украден?

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

Ответы [ 3 ]

12 голосов
/ 11 ноября 2010

Ничто не мешает этому.Вы получаете идентификатор сеанса, вы можете принять участие в сеансе.

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

  1. у них есть возможность «человек посередине», и в этом случае у вас гораздо более серьезные проблемы, чемтолько идентификаторы сеанса;

  2. вы оставили дыру в межсайтовом скриптинге, и в этом случае у вас проблемы намного хуже, чем просто идентификаторы сеанса;

  3. вы уязвимы для атак связывания DNS / междоменных приготовлений, и в этом случае вы должны исправить это, разрешив только хорошо выполненные Host: запросы.

(Хотя вы можете попытаться связать сеансы с IP-адресами, это может привести к срыву действительных сеансов, например, из-за циклического прокси-сервера. IP-адреса могут использоваться как часть более широкой стратегии обнаружения подозрительной активности, но в общедоступном Интернете это не очень хорошая идеявсегда требовать, чтобы каждый запрос в сеансе приходил с одного и того же IP-адреса.)

К сожалению, в сервлете есть еще один случай, кроме файлов cookie: jsessionid= параметры.Так как они появляются в самом URL, это делает их намного более утечечными (например, через рефереры и вставленные ссылки).И это далеко не единственная практическая проблема с идентификаторами сеансов параметров.Они портят навигацию и портят SEO.

На мой взгляд jsessionid= URL-адреса - одна из худших ранних ошибок Servlet, дискредитированная стратегия возврата файлов cookie из прошлых лет, которая не должна использоваться ни для чего.Но, конечно, им нельзя разрешать предоставлять доступ к любым привилегированным данным;рассмотрите возможность использования HTTP Basic Authentication вместо этого, если вам нужен механизм отката для браузеров, которые не поддерживают куки.

В Servlet 3.0 вы можете легко отключить jsessionid= URL, используя <session-config> в web.xml;к сожалению, в предыдущих версиях вы оставались бездельничающими с фильтрами, если хотите правильно отключить эту функцию.

8 голосов
/ 11 ноября 2010

Да, они могли бы использовать это. Ничего не делается для его защиты, если вы не используете весь трафик через SSL.

Так работает Firesheep , которому в последнее время уделяется много внимания облегчению кражи сессий.

0 голосов
/ 11 ноября 2010

Да, идентификатор сеанса дает кому-то доступ к соответствующему сеансу.

Вы можете сохранить IP-адрес, использованный при входе в систему, в сеансе, и когда изменения IP-адреса требуют повторной регистрации пользователя. Кроме того (хотя и не уверен, что это будет сделано автоматически), вы можете сделать то же самое для User Agent - хотя на самом деле это не повысит безопасность от злонамеренных атак, а только против глупых пользователей, случайно выдающих свой sessionid, если он передается через GET, а не cookie. *

...