Найти - Пользователи
Полная версия: как подключить свой механизм сессий
Начало » Django » как подключить свой механизм сессий
1 2
fetish
имеем след. неприятный момент: стандартные сессии в джанго никак не защищены от перехвата сида
разные разглагольствования в документации про секьюре_куки и прочая белиберда - это для пионеров. никакого практического смысла эти действия не несут. придется все делать самому.

итак, я хочу сделать следующее: сессиия должна не тупо подниматься по sessionid, но в поднятой сессии еще должны проверяться параметры предыдущего соединения на предмет совпадения с текущими. в частности, например, REMOTE_ADDR
как я понимаю, мне нужно переопределить django.contrib.sessions.SessionMiddleware (в частности, метод process_request), чтобы он после поднятия сессии производил проверку request.META на соответствие с session и в случае несоответствия, в request.session заводилась бы новая сессия

вопрос: как это сделать?
ибо у меня никак не получается заставить джангу подхватить сессии через мой миддлварь…
Александр Кошелев
fetish
вопрос: как это сделать?
Отключить стандартную мидлварь и включить свою на её место.
romankrv
fetish
разные разглагольствования в документации про секьюре_куки и прочая белиберда - это для пионеров. никакого практического смысла эти действия не несут.
Подтвердите фактами ваше утверждение, чтобы не вводить в заблуждение тех кто не в курсе этого вопроса, что это белеберда.
И тогда вам нужно сообщить об этом разработчикам – указать им что они “пионеры” чтобы переделали свой “неудачный софт”. Раз вы тут так кричите о этой проблеме.

Спасибо за внимание.
Андрей Светлов
Если уж так хочется - стоит использовать HTTPS. Проверка REMOTE_ADDR тоже ломается “пионерскими” методами. Тогда как HTTPS вполне надежен - и изобретать ничего не нужно.
fetish
Daevaorn
Отключить стандартную мидлварь и включить свою на её место.
ну это понятно
а как это сделать-то?
допустим, я нарисовал
from django.contrib.sessions.middlware

class MySessionMiddleware(middleware.SessionMiddleware):
def process_request(self, request):
...
как теперь мне объяснить джанге, что именно его нужно использовать в сессии?

Андрей Светлов
Если уж так хочется - стоит использовать HTTPS.
не поможет
Андрей Светлов
Проверка REMOTE_ADDR тоже ломается “пионерскими” методами.
например?

romankrv
Подтвердите фактами ваше утверждение, чтобы не вводить в заблуждение тех кто не в курсе этого вопроса, что это белеберда.
зайдите в видеораздел на xakep.ru или video.antichat.ru и посмотрите как воруют чужие кукисы
romankrv
И тогда вам нужно сообщить об этом разработчикам – указать им что они “пионеры” чтобы переделали свой “неудачный софт”.
разработчикам ничего сообщать не нужно. они все правильно сделали. в америке бессмысленно привязывать сессию к ip-адресу по очень простой причине - у одного из самых крупных провайдеров америки - AOL - ip-адрес пользователя может смениться в любой момент.
поэтому девелоперы джанго позволили конечным разработчикам переопределять поведение стандартных моделей
Александр Кошелев
fetish
ну это понятно
а как это сделать-то?
ну что же вы сами как пионер и не читаете документацию?:-) http://docs.djangoproject.com/en/dev/topics/http/sessions/#enabling-sessions

Вот на место стандартной SessionMiddleware свою и ставьте.
fetish
Daevaorn
Вот на место стандартной SessionMiddleware свою и ставьте.
О.Е. !!! все заработало
надо свой миддлварь прописать в MIDDLEWARE_CLASSES ПОСЛЕ ‘django.contrib.sessions.middleware.SessionMiddleware’
иначе будет работать стандартный механизм сессий

а я даже ‘django.contrib.sessions.middleware.SessionMiddleware’ удалял из MIDDLEWARE_CLASSES, но что джанго сильно ругался

однако, теперь мне вот что стало непонятно:
как джанго узнал, что нужно использовать мою миддлварь? неужели ему пофиг и он смотрит исключительно по именам методов?
я обязательно проверю это завтра, если не забуду - сегодня мне уже ничего не дадут сделать :)

Daevaorn
ну что же вы сами как пионер и не читаете документацию?:-)
в документации подробно расписано как делать “хелло ворды”
о том как работает джанго и как с ней работать в документейшене почти ничего не сказано
Александр Кошелев
fetish
как джанго узнал, что нужно использовать мою миддлварь? неужели ему пофиг и он смотрит исключительно по именам методов?
Джанга пробегает по списку мидлварей, дергает каждую по порядку и вызывает методы в зависимости от стадии обработки запроса.
fetish
в документации подробно расписано как делать “хелло ворды”
о том как работает джанго и как с ней работать в документейшене почти ничего не сказано
Вы ошибаетесь. В документации покрыто очень много юзкейсов от простых до сложных. В том числе и ответ на ваш вопрос.
Ferroman
1. У нас тоже большинство пользователей с динамическими айпи, или практически с общей внешней. Так что или не будет работать проверка и будут заводится новые сессии, или внутри одного провайдера/сети можно вполне украсть куки, и те пройдут проверку.
2. https позволяет закрыть траффик от третьих лиц, а следовательно украсть куки обычным сниффером не получится.
По поводу подставки IP - я не знаю простого способа это сделать.
fetish
Daevaorn
…и вызывает методы в зависимости от стадии обработки запроса.
вот это я и подозревалл….
Ferroman
https позволяет закрыть траффик от третьих лиц, а следовательно украсть куки обычным сниффером не получится.
никакие снифферы не нужны
достаточно найти xss
Ferroman
По поводу подставки IP - я не знаю простого способа это сделать.
вот именно
методы обхода есть, но атака в данном случае будет весьма трудозатратна для нападающего
Ferroman
У нас тоже большинство пользователей с динамическими айпи…
динамическим, но, тем не менее, постоянным в течение сессии
аол меняет внешние айпишники своим клиентам раз в час (или два?) по очень простой причине - чтобы они не тянули из интернета тяжелые файлы
и то это обходится покупкой внешнего ip
Ferroman
…или практически с общей внешней.
в любом случае, круг атакующих сильно сужается
Ferroman
…или внутри одного провайдера/сети можно вполне украсть куки, и те пройдут проверку.
а вот для этого есть уже другие способы
я же не сказал, что я только ip проверяю :)
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