Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 24, 2010 11:28:37

dissdoc
От:
Зарегистрирован: 2009-12-12
Сообщения: 273
Репутация: +  0  -
Профиль   Отправить e-mail  

Cookie и session. Правильная организация

Всем привет. Я не собираюсь мучить вопросами КАК установить куки и КАК работать с сессиями. Меня интересует более глобальный вопрос. Как организовать работу так, чтобы это было ГРАММОТНО.
Т.е. смотрите. Я сейчас в самом элементарном виде ставлю куки вот так

response.set_cookie("name", user.name, max_age=6000, domain="localhost")
response.set_cookie("password", user.password, max_age=6000, domain="localhost")
Это нормально так устанавливать куки?

И второй вопрос - как принудительно удалить куки?



Офлайн

#2 Янв. 24, 2010 12:00:34

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Cookie и session. Правильная организация

Я не рекомендую так использовать куки, и уж точно не надо держать в них пароль.
Используйте только сессии.

Офлайн

#3 Янв. 24, 2010 12:33:14

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Cookie и session. Правильная организация

dissdoc
Это нормально так устанавливать куки?
Если учесть что использование response.set_cookie это единственно возможный способ установки куки, то да, нормально, с точки зрения API. Если же рассматривать с точки зрения логики и верности подхода, то ответить невозможно, т.к. мы не знаешь о вашей задаче.
dissdoc
И второй вопрос - как принудительно удалить куки?
http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpResponse.delete_cookie



Офлайн

#4 Янв. 24, 2010 13:13:23

dissdoc
От:
Зарегистрирован: 2009-12-12
Сообщения: 273
Репутация: +  0  -
Профиль   Отправить e-mail  

Cookie и session. Правильная организация

Задача простая. Пока изучаю джанго.
Просто решил попробовать написать авторизацию и работу пользователя на портале. Ну самое элементарное. Вот и думаю об организации.
Про класс User я знаю. Не стал его использовать только из-за соображения - я только учусь и у меня нет сроков, чтобы испоьзовать готовые проекты. А изучить можно только изобретая свой велосипед.

Если не юзать пароль… Остается использовать id (ну или login уникальный) пользователя и просто проверять активны куки или нет. Если активны, то вперед на работу за сайтом… но сразу вопрос - я ведь могу сам установить куки и получить права определенного юзверя… Как тогда организовать работу? Как хранить куки/сессии так, чтобы это было грамотно. Но я честно говоря не понимаю опасности хранить пароль в той же сессии например? В сессии можно хранить?

Блин, пока писал - запутался… Зачем тогда вообще куки, если сессии есть?



Офлайн

#5 Янв. 24, 2010 14:52:22

dissdoc
От:
Зарегистрирован: 2009-12-12
Сообщения: 273
Репутация: +  0  -
Профиль   Отправить e-mail  

Cookie и session. Правильная организация

Подсмотрел способ - хранить сессии в БД, заведя еще одну модельку для сессий. Вариант показался грамотным.



Офлайн

#6 Янв. 24, 2010 19:46:05

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Cookie и session. Правильная организация

Вообще-то джанго автоматически и по-умолчанию сохраняет сессии в базе. У пользователя только id этой сессии.
Джанга уже грамотно и безопасно всё хранит.

Офлайн

#7 Янв. 24, 2010 20:02:17

dissdoc
От:
Зарегистрирован: 2009-12-12
Сообщения: 273
Репутация: +  0  -
Профиль   Отправить e-mail  

Cookie и session. Правильная организация

Да, кстати это я недавно нашел тоже…
http://docs.djangoproject.com/en/dev/topics/http/sessions/#using-sessions-out-of-views
Получить ключ вот так как я понял

request.session.session_key
Остается только 2 вопроса.
1. Вот я установил сессию. Вот я вышел с сайта. Вот я зашел на сайт. И получается я беру сессию по имени и получаю какие-то параметры. Тогда вопрос - где безопасность? Я (зная что хранится в сессии) могу удаленно установить сессию. И вуаля - я получил права пользователя (а возможно и суперюзера)
Пример банальный. Я в сессию записываю допустим id пользователя. Вот так (прямо из примера)
request.session['member_id'] = m.id
Тогда я удаленно вообще какой хочу id установлю)) И получу любого пользователя. Или я что-то не понимаю? Получается само-собой необходимо хранить пару параметров в сессии ну и напрашивается хранение пароля…. ну хотя бы в md5… Может быть еще и соль использовать. Где я тут ошибаюсь?

2. Тут проще. Сессия хранит в модели Session свою id… Как же мне тогда получить ту самую сессию безопасно? Т.е. я зашел на сайт. У меня есть сессия моя … Собственно, мне и не нужно получать тогда pk ключ для сессии… И опять возвращаемся к безопасности.. Зная имя сессии - я могу творить на сайте что захочу… Вообщем, думаю, нужно разобраться с моим первым вопросом, может что и прояснится…



Офлайн

#8 Янв. 24, 2010 20:56:06

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Cookie и session. Правильная организация

Поясните пожалуйста пошагово. Я несколько раз прочитал - так и не понял сути проблемы.
Возможно вы не понимаете что такое и для чего нужны эти самые сессии. Суть в том, что каждый пользователь получает куку с id сессии, а ключи сессии содержатся на сервере. Это, позволяет избежать хранение в куках небезопасных данных, или их подстановки/исправления со стороны пользователя, т.е. кража куки не даст злоумышленнику дополнительной информации. Но, конечно, подмена сессии во время её существования - вполне возможная атака.
Более подробно о безопасности сессий можно почитать здесь - http://phpclub.ru/detail/article/sessions
Вкратце - наиболее эффективно - короткое время жизни сессии и SESSION_COOKIE_SECURE. Но, честно говоря, такое необходимо не часто, и на задачах где безопасность ставится во главу угла.
Всё остальное (на вроде “отпечатков”) фреймворк сделает за вас.

Про возможные проблемы в плане безопасности (в том числе и сессий), и их возможные решения, можно почитать тут: http://www.djangobook.com/en/beta/chapter20/

Отредактировано (Янв. 24, 2010 21:02:48)

Офлайн

#9 Янв. 25, 2010 09:49:35

dissdoc
От:
Зарегистрирован: 2009-12-12
Сообщения: 273
Репутация: +  0  -
Профиль   Отправить e-mail  

Cookie и session. Правильная организация

Все. Я более менее разобрался в этом вопросе. Проблема была в том, что я не до конца понимал как в джанге организовано хранение сессий. Вроде как стало понятно все.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version