Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Resin и DOS атаки 
:(
    Опции темы
UnicornMirage
Дата 7.5.2006, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 15.11.2005

Репутация: нет
Всего: 1



Привет всем.
тут возник вопрос - с сессиями.. проводил небольшой эксперимент - создавал сервлет в котором в методе service создавал сессию:
HttpSession session = request.getSession();

так вот если на стороне клиента отключить поддержку Cookies то при каждом запросе пользователя с данного хоста будет создаваться объект HttpSession - не является ли это потенциальной возможностью перегрузить сервер Resin экземплярами сессий? Ну и что что время сессии можно установить - даже если поставить минимальное значение жизни - 1 минуту - то в течении 1 минуты можно в цикле наплодить столько сессий - что никакой памяти не хватит. Это разумеется лишь предположение - и я, как новичок, буду продолжать исследовать эту область - тем не менее задаю вопрос гуру. 
PM MAIL   Вверх
Tirael
Дата 7.5.2006, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 31.1.2006
Где: Москва

Репутация: 1
Всего: 7



Сессия создается для каждого нового клиента. Один раз. Если один и тот же клиент опять заходит на сервер, сессия сохраняется, а не создается новая. Сколько клиентов - столько сессии.

Добавлено @ 21:34 
Цитата(UnicornMirage @  7.5.2006,  21:11 Найти цитируемый пост)
о при каждом запросе пользователя с данного хоста будет создаваться объект HttpSession

не будет. Создастья только один раз.  
--------------------
 
PM MAIL   Вверх
batigoal
Дата 7.5.2006, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



Цитата(Tirael @  7.5.2006,  22:31 Найти цитируемый пост)
Сессия создается для каждого нового клиента. Один раз. Если один и тот же клиент опять заходит на сервер, сессия сохраняется, а не создается новая. Сколько клиентов - столько сессии.

Хм. По-моему, механизм не совсем такой. Если клиент уходит с сайта, а потом заходит на него ещё раз, то создается новая сессия (возможно, нужен некоторый таймаут, иначе подхватится старая). 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Tirael
Дата 7.5.2006, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 31.1.2006
Где: Москва

Репутация: 1
Всего: 7



Цитата(Lamer George @  7.5.2006,  21:41 Найти цитируемый пост)
Если клиент уходит с сайта, а потом заходит на него ещё раз, то создается новая сессия

Кажется можно указать какой тип сессии создавать: которая исчезает по таймауту, или которая исчезает как только пользователь покинул сайт.  
--------------------
 
PM MAIL   Вверх
UnicornMirage
Дата 7.5.2006, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 15.11.2005

Репутация: нет
Всего: 1



я просто проверял с помощью листенера HttpSessionListener который реализовывал в своем сервлете.. при каждом запросе к сервлету создавался новый экземпляр сессии - я даже проверял флаг HttpSession.isNew- это происходило при отключенных куках на стороне клиента. Если куки включить - то разумеется сессия будет возвращаться старая...

Таймаут ставил у сессии - 1 минуту.. разумеется все новые уничтожались.. только пока я проводил эксперимент - наплодил объектов около сотни.... а если написать цикл запросов к серверу? что будет? smile

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

Добавлено @ 22:02 
авообще все эти вопросы возникли совершенно из другой задачи - мне хотелось как то раскопать в библиотеке com.caucho хоть что нить напоминающее менеджер сессий - чтобы из сервлета иметь возможность управлять активными сессиями... уверен что в Резине это есть но это спрятано...

например интересный класс Jmx - до сих пор немогу понять как им нормально пользоваться... 
PM MAIL   Вверх
batigoal
Дата 7.5.2006, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



Цитата(Tirael @  7.5.2006,  22:53 Найти цитируемый пост)
Кажется можно указать какой тип сессии создавать: которая исчезает по таймауту, или которая исчезает как только пользователь покинул сайт.

У любой сессии есть таймаут, но это таймаут её уничтожения, когда юзер сидит и ковыряет в носу, глядя на страничку. А вот в немедленном уничтожении сессии после закрытия браузера я не уверен. Надо будет поэкспериметировать.

Цитата(UnicornMirage @  7.5.2006,  22:59 Найти цитируемый пост)
при каждом запросе к сервлету создавался новый экземпляр сессии

А как ты делал эти запросы - перезапуском браузера, или как-то по-другому? 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
UnicornMirage
Дата 7.5.2006, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 15.11.2005

Репутация: нет
Всего: 1



Цитата
А вот в немедленном уничтожении сессии после закрытия браузера я не уверен. Надо будет поэкспериметировать.

насколько я понял при экспериментировании (вариьировании параметра session.setMaxInactiveInterval(int time)) - хотя в спецификации указано что передаваемое значение в секундах - на практике оказывалось в минутах - например при указании параметра равным 1 - сессия существовала минуту неактивности. Меньше задать таймаут не получилось.

Цитата
А как ты делал эти запросы - перезапуском браузера, или как-то по-другому?

1) я в браузере отключил поддержку куков
2) из браузера делал GET запрос к сервлету - причем все время делал refresh страницы - запросы шли одни и те же.. и каждое обращение фиксировалось HttpSessionListener'ом - создавался новый объект HttpSession и у него флаг isNew был true.


вообще насколько мне стало ясно когда я пытался разобраться как работает HttpSession - он работает только на основании Cookie - нет куков - сессия создается как будто бы пользователь зашел в первый раз.. есть куки - контейнер сервлетов ищет в своем Map'e сессий уже созданный экземпляр HttpSession по ключу идентификатора сессии...

Как бы я хотел получить доступ к этому гипотетическому Map сессий в Resin (кто бы знал! smile ) - это моя давняя мечта... Не хочется делать собственную коллекцию активных сессий - ведь она существует в resin и по моему где то через JNDI ее можно достать.. только как? 
PM MAIL   Вверх
ALKS
Дата 8.5.2006, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 6
Всего: 11



сессия уничтожается только по тайм-ауту апп сервер просто не в состоянии узнать что пользователь закрыл браузер. как? реквеста-то об этом не поступит smile

сесия связыватеься с браузером: запустите оперу, IE а фаерфокс с одной машина на один и тот же сайт - создаться 3 сесии smile 

если куки убраны, то нужно обеспечивать то, что в запросе будет присутсвовать почти-параметр JSESSION и вот с этим у автора я полагаю проблеммы. smile 
PM   Вверх
UnicornMirage
Дата 8.5.2006, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 15.11.2005

Репутация: нет
Всего: 1



сессия связывается не с браузером а с куком, если взять кук с одного браузера и перенести его на другой - сессия будет та же. 
PM MAIL   Вверх
Tirael
Дата 8.5.2006, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 31.1.2006
Где: Москва

Репутация: 1
Всего: 7



Цитата(ALKS @  8.5.2006,  00:31 Найти цитируемый пост)
сессия уничтожается только по тайм-ауту апп сервер просто не в состоянии узнать что пользователь закрыл браузер. как? реквеста-то об этом не поступит 

И все равно у меня чувство, что где-то я об этом читал. Впрочем, возможно вы правы. Разберусь завтра. 

Цитата(UnicornMirage @  8.5.2006,  00:51 Найти цитируемый пост)
сессия связывается не с браузером а с куком,

Хм...я всегда думал, что если куки отключены, сессией все таки можно пользоваться. 
--------------------
 
PM MAIL   Вверх
batigoal
Дата 8.5.2006, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



Цитата(ALKS @  8.5.2006,  01:31 Найти цитируемый пост)
если куки убраны, то нужно обеспечивать то, что в запросе будет присутсвовать почти-параметр JSESSION и вот с этим у автора я полагаю проблеммы.

То есть сессия может отслеживаться только этими двумя способами (JSESSION либо куки)? 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
ALKS
Дата 8.5.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 6
Всего: 11



Цитата(UnicornMirage @  8.5.2006,  00:51 Найти цитируемый пост)
сессия связывается не с браузером а с куком, если взять кук с одного браузера и перенести его на другой - сессия будет та же. 

Нет. Сессия связывается с еёной ID. smile т.е. просто с неким номером который с каждым реквестом должен приходить апп-серверу. другое дело что апп сервер пытаеться выдрать номер от куда только можно и  впервую очередь - из Cookies.
Для простоты: каждый раз когда реквест приходит апп-серверу он обязан сообщить в соответсвии с какой сесией он приперся. если он не сообщит - будет создана новая сесия для него.


Цитата(Lamer George @ 8.5.2006,  10:04)
Цитата(ALKS @  8.5.2006,  01:31 Найти цитируемый пост)
если куки убраны, то нужно обеспечивать то, что в запросе будет присутсвовать почти-параметр JSESSION и вот с этим у автора я полагаю проблеммы.

То есть сессия может отслеживаться только этими двумя способами (JSESSION либо куки)?

Нет smile
По умолчанию (ну или в соответствии со спецификацией) сессия может отслеживаться только по JSESSIONID. Но если Cookies включены, то JSESSIONID помещаются в Cookies. Но никто не запрещает вам организовать собственный механизм для отслеживания сесий. smile

А чтобы JSESSIONID при необходимости добавлялось в линк нужно вызвать метод encodeURL класса HttpServletResponse.

ну т.е. в простейшем случае, в JSP все линки нужно обработать примерно так:
Код

<a href="<%=response.encodeURL("/app/mycoollink.do")%>">Link</a>


encodeURL сам решит когда нужно параметр в линк пихать а когда нет smile  

Это сообщение отредактировал(а) ALKS - 8.5.2006, 11:31
PM   Вверх
ALKS
Дата 8.5.2006, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 6
Всего: 11



Цитата(Tirael @ 8.5.2006,  01:03)
Цитата(ALKS @  8.5.2006,  00:31 Найти цитируемый пост)
сессия уничтожается только по тайм-ауту апп сервер просто не в состоянии узнать что пользователь закрыл браузер. как? реквеста-то об этом не поступит 

И все равно у меня чувство, что где-то я об этом читал. Впрочем, возможно вы правы. Разберусь завтра. 

Да ну вас право smile. Ещё раз: чтобы убить сессию по событию закрытия броузера, апп-сервер должен получить соответсвующий реквест. сам по себе Браузер ничего такого не шлет, но этого можно добиться, нарпимер написав плагин для браузера smile.
Весьма вероятно есть и другие пути (например java-апплет или ActiveX но я не в том ни в другом почти ничего не понимаю, так что не ругайтесь сильно). В любом случае никто в здравом уме таким извратом страдать не будет smile 
PM   Вверх
UnicornMirage
Дата 8.5.2006, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 15.11.2005

Репутация: нет
Всего: 1



Цитата
А чтобы JSESSIONID при необходимости добавлялось в линк нужно вызвать метод encodeURL класса HttpServletResponse.


вот спасибо, не знал этого smile буду экспериментировать дальше! 

хороший метод! супер! можно дублировать JSESSIONID как в куках, так и в параметрах GET-запроса.. 

cскажите, а получающаяся ссылка в результате вызова метода response.encodeURL содержит добавленную строку jsessionid=xxxxxxxxxxxxxxxx через разделитель ' ; ' - это специфический разделитель, используемый для сервлетов? либо это какой то стандартный разделитель в GET- запросах?

 

Это сообщение отредактировал(а) UnicornMirage - 8.5.2006, 14:36
PM MAIL   Вверх
UnicornMirage
Дата 8.5.2006, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 15.11.2005

Репутация: нет
Всего: 1



и всё таки это можно обойти - вначале вопроса я имел ввиду возможность организации DOS атаки.. предположим пользователь намеренно отключит куки - возьмет GET-запрос и исключит из него jsessionid. будет посылать серверу этот запрос в цикле а тот будет создавать все новые и новые HttpSessions.

что нужно сделать в сервлете чтобы не плодить объекты HttpSession?    

Это сообщение отредактировал(а) UnicornMirage - 8.5.2006, 14:50
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1728 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.