Web технологии

15. Сессии и Авторизация

Дмитрий Смаль

Авторизация в Web-приложениях

Авторизация в Web-приложениях

HTTP - stateless протокол, т.е. не предполагает поддержания соединения между клиентом и сервером. Это значит, что сервер не может связать информацию о пользователе с конкретным соединением и вынужден загружать ее при каждом запросе.

Basic HTTP Authorization

Basic HTTP Authorization

Заголовки и коды ответа

Достоинства и недостатки

Cookies

Cookies

Cookies - небольшие фрагменты данных, которые браузер хранит на стороне клиента и передает на сервер при каждом запросе. Cookies привязаны к доменам, поэтому при каждом запросе сервер получает только «свои» cookies. Невозможно получить доступ к cookies с другого домена. Cookies используются для поддержания состояния (state management) в протоколе HTTP и, в частности, для авторизации.

Атрибуты Cookie

Установка и удаление Cookies

Для удаления cookie, сервер устанавливает Expires в прошлом.

Получение Cookies

При каждом запросе браузер выбирает подходящие cookies и отправляет только их значения.

Правила выбора Cookies

Пусть URL=http://my.app.site.com/blog/post/12
Браузер выберет все cookies, у которых:

Работа с cookie в Django

Cookie-based авторизация

Cookie-based авторизация

Необходимые модели

Вход на сайт

URL = /login/

Проверка сессии

При запросе по любому URL:

Как правило, для проверки сессии используются middleware.

Middleware в Django

Middleware - это Python класс, в котором есть один из указанных ниже методов. Список всех активных middleware указан в настройке MIDDLEWARE_CLASSES.

Выход из приложения

Для выхода из приложения достаточно удалить объект сессии:

Встроенная авторизация Django

django.contrib.sessions

Предоставляет поддержку сессий, в том числе анонимных. Позволяет хранить в сессии произвольные данные, а не только ID пользователя. Позволяет хранить сессии в различных хранилищах, например Redis или Memcached.

django.contrib.auth

Предоставляет готовую модель User, готовую систему разделения прав, view для регистрации / входа / выхода. Используется другими приложениями, например django.contrib.admin

Безопасность

Безопасность паролей

Главная задача - максимально затруднить доступ злоумышленника к исходному паролю пользователя. Меры безопасности:

Безопасность сессий

Основное направление атаки - кража cookie, хранящей ключ сессии, т.е. кража авторизации. Меры безопасности: