Найти - Пользователи
Полная версия: Cookie и session. Правильная организация
Начало » Django » Cookie и session. Правильная организация
1
dissdoc
Всем привет. Я не собираюсь мучить вопросами КАК установить куки и КАК работать с сессиями. Меня интересует более глобальный вопрос. Как организовать работу так, чтобы это было ГРАММОТНО.
Т.е. смотрите. Я сейчас в самом элементарном виде ставлю куки вот так
response.set_cookie("name", user.name, max_age=6000, domain="localhost")
response.set_cookie("password", user.password, max_age=6000, domain="localhost")
Это нормально так устанавливать куки?

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

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

Блин, пока писал - запутался… Зачем тогда вообще куки, если сессии есть?
dissdoc
Подсмотрел способ - хранить сессии в БД, заведя еще одну модельку для сессий. Вариант показался грамотным.
Ferroman
Вообще-то джанго автоматически и по-умолчанию сохраняет сессии в базе. У пользователя только id этой сессии.
Джанга уже грамотно и безопасно всё хранит.
dissdoc
Да, кстати это я недавно нашел тоже…
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 ключ для сессии… И опять возвращаемся к безопасности.. Зная имя сессии - я могу творить на сайте что захочу… Вообщем, думаю, нужно разобраться с моим первым вопросом, может что и прояснится…
Ferroman
Поясните пожалуйста пошагово. Я несколько раз прочитал - так и не понял сути проблемы.
Возможно вы не понимаете что такое и для чего нужны эти самые сессии. Суть в том, что каждый пользователь получает куку с id сессии, а ключи сессии содержатся на сервере. Это, позволяет избежать хранение в куках небезопасных данных, или их подстановки/исправления со стороны пользователя, т.е. кража куки не даст злоумышленнику дополнительной информации. Но, конечно, подмена сессии во время её существования - вполне возможная атака.
Более подробно о безопасности сессий можно почитать здесь - http://phpclub.ru/detail/article/sessions
Вкратце - наиболее эффективно - короткое время жизни сессии и SESSION_COOKIE_SECURE. Но, честно говоря, такое необходимо не часто, и на задачах где безопасность ставится во главу угла.
Всё остальное (на вроде “отпечатков”) фреймворк сделает за вас.

Про возможные проблемы в плане безопасности (в том числе и сессий), и их возможные решения, можно почитать тут: http://www.djangobook.com/en/beta/chapter20/
dissdoc
Все. Я более менее разобрался в этом вопросе. Проблема была в том, что я не до конца понимал как в джанге организовано хранение сессий. Вроде как стало понятно все.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB