SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
Авторизация в
Web-
приложениях
Авторизация в Web-приложениях
HTTP - stateless протокол, т.е. не предполагает поддержания
соединения между клиентом и сервером. Это значит, что сервер не
может связать информацию о пользователе с конкретным
соединением и вынужден загружать ее при каждом запросе.
2
Basic HTTP
Authorization
Basic HTTP Authorization
4
Заголовки и коды ответа
•   401 Unauthorized - для доступа к ресурсу нужна авторизация
•   WWW-Authenticate: Basic realm="admin" - запрос логина/
пароля для раздела admin
•   Authorization: Basic Z2l2aTpkZXJwYXJvbA== - передача
логина/пароля в виде base64(login + ':' + password)
•   403 Forbidden - логин/пароль не подходят
•   REMOTE_USER - CGI переменная с именем авторизованного
пользователя
5
Достоинства и недостатки
➕ Простота и надежность
➕ Готовые модули для web-серверов
➕ Не требует написания кода
➖ Логин/пароль передаются в открытом виде - нужен https
➖ Невозможно изменить дизайн формы входа
➖ Невозможно «сбросить» авторизацию
6
Cookies
Cookies
Cookies - небольшие фрагменты данных, которые браузер хранит
на стороне клиента и передает на сервер при каждом запросе.
Cookies привязаны к доменам, поэтому при каждом запросе
сервер получает только «свои» cookies. Невозможно получить
доступ к cookies с другого домена. Cookies используются для
поддержания состояния (state management) в протоколе HTTP и, в
частности, для авторизации.
8
Атрибуты Cookie
•   name=value - имя и значение cookie
•   Expires - время жизни cookie, по умолчанию - до закрытия окна.
•   Domain - домен cookie, по умолчанию - домен текущего URL.
•   Path - путь cookie, по умолчанию - путь текущего URL.
•   Secure - cookie должна передаваться только по https
•   HttpOnly - cookie не доступна из JavaScript
9
Установка и удаление Cookies
Set-Cookie: sessid=d232rn38jd1023e1nm13r25z;
Domain=.site.com; Path=/admin/;
Expires=Sat, 15 Aug 2015 07:58:23 GMT;
Secure; HttpOnly
Set-Cookie: lang=ru
Set-Cookie: sessid=xxx;
Expires=Sun, 06 Nov 1994 08:49:37 GMT
Для удаления cookie, сервер устанавливает Expires в прошлом.
10
Получение Cookies
Cookie: sessid=d232rn38jd1023e1nm13r25z; lang=ru;
csrftoken=vVqoyo5vzD3hWRHQDRpIHzVmKLfBQIGD;
При каждом запросе браузер выбирает подходящие cookies и
отправляет только их значения.
11
Правила выбора Cookies
Пусть URL= http://my.app.site.com/blog/post/12
Браузер выберет все cookies, у которых:
•   Не истек срок Expires
•   Domain совпадает с my.app.site.com или является .суффиксом,
например Domain=.site.com
•   Path является префиксом /blog/post/12 ,
например Path=/blog/
•   Не стоит флага Secure
12
Работа с cookie в Django
# установка
resp.set_cookie('sessid','asde132dk13d1')
resp.set_cookie('sessid','asde132dk13d1',
domain='.site.com', path='/blog/',
expires=(datettime.now() + timedelta(days=30)))
# удаление
resp.delete_cookie('another')
# получение
request.COOKIES # все cookies
request.COOKIES.get('sessid') # одна cookie
13
Cookie-based
авторизация
Cookie-based авторизация
15
Необходимые модели
class User(models.Model):
login = models.CharField(unique=True)
password = models.CharField()
name = models.CharField()
class Session(models.Model):
key = models.CharField(unique=True)
user = models.ForeignKey(User)
expires = models.DateTimeField()
16
Вход на сайт
URL = /login/
•   Клиент отправляет login / password на сервер
•   Сервер проверяет login / password и создает сессию
•   Сервер устанавливает cookie, содержащий ключ сессии
•   Сервер делает перенаправление на целевую страницу
17
def login(request):
error = ''
if request.method == 'POST':
login = request.POST.get('login')
password = request.POST.get('password')
url = request.POST.get('continue', '/')
sessid = do_login(login, password)
if sessid:
response = HttpResponseRedirect(url)
response.set_cookie('sessid', sessid,
domain='.site.com', httponly=True,
expires = datetime.now()+timedelta(days=5)
)
return response
else:
error = u'Неверный логин / пароль'
return render(request, 'login.html', {'error': error })
18
def do_login(login, password):
try:
user = User.objects.get(login=login)
except User.DoesNotExist:
return None
hashed_pass = salt_and_hash(password)
if user.password != hashed_pass
return None
session = Session()
session.key = generate_long_random_key()
session.user = user
session.expires = datetime.now() + timedelta(days=5)
session.save()
return session.key
19
Проверка сессии
При запросе по любому URL:
•   Клиент передает в заголовке Cookie свой sessid
•   Сервер загружает сессию из базы данных по sessid
•   Сервер загружает объект пользователя по id из сессии
Как правило, для проверки сессии используются middleware .
20
Middleware в Django
Middleware - это Python класс, в котором есть один из указанных
ниже методов. Список всех активных middleware указан в
настройке MIDDLEWARE_CLASSES .
•   process_request(request)
•   process_view(request, view, args, kwargs)
•   process_response(request, response)
•   process_exception(request, exception)
21
# project/project/middleware.py
class CheckSessionMiidleware(class):
def process_request(request):
try:
sessid = request.COOKIE.get('sessid')
session = Session.objects.get(
key=sessid,
expires__gt=datetime.now(),
)
request.session = session
request.user = session.user
except Session.DoesNotExist:
request.session = None
request.user = None
22
Выход из приложения
Для выхода из приложения достаточно удалить объект сессии:
def logout(request):
sessid = request.COOKIE.get('sessid')
if sessid is not None:
Session.objects.delete(key=sessid)
url = request.GET.get('continue', '/')
return HttpResponseRedirect(url)
23
Встроенная
авторизация
Django
django.contrib.sessions
Предоставляет поддержку сессий, в том числе анонимных.
Позволяет хранить в сессии произвольные данные, а не только ID
пользователя. Позволяет хранить сессии в различных
хранилищах, например Redis или Memcached.
def some_view(request):
val = request.session['some_name']
request.session.flush()
request.session['some_name'] = 'val2'
25
django.contrib.auth
Предоставляет готовую модель User , готовую систему разделения
прав, view для регистрации / входа / выхода. Используется другими
приложениями, например django.contrib.admin
def some_view(request):
user = request.user # Определено всегда!
if user.is_authenticated():
pass # обычный пользователь
else:
pass # анонимный пользователь
26
Безопасность
Безопасность паролей
Главная задача - максимально затруднить доступ злоумышленника
к исходному паролю пользователя. Меры безопасности:
•   Отправка формы входа (login / password) по https
•   Пароли хранятся в виде хэшей с добавлением соли
•   Защита от перебора в форме логина, например captcha
28
Безопасность сессий
Основное направление атаки - кража cookie, хранящей ключ
сессии, т.е. кража авторизации. Меры безопасности:
•   Ключ сессии невозможно подобрать перебором
•   HttpOnly флаг для сессионной cookie
•   Привязка сессии к IP адресу
•   Ограничение сессий по времени
•   Запрос пароля при критических действиях: смене пароля и т.д.
29

Más contenido relacionado

La actualidad más candente

Загрузка, обработка, хранение и отдача статики
Загрузка, обработка, хранение и отдача статикиЗагрузка, обработка, хранение и отдача статики
Загрузка, обработка, хранение и отдача статикиKirill Mokevnin
 
Михаил Юматов: SaltStack
Михаил Юматов: SaltStackМихаил Юматов: SaltStack
Михаил Юматов: SaltStackit-people
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_rumcroitor
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)7bits
 
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»Tanya Denisyuk
 
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеВладимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеYandex
 
«Разработка и оптимизация высоконагруженного проекта»
«Разработка и оптимизация высоконагруженного проекта» «Разработка и оптимизация высоконагруженного проекта»
«Разработка и оптимизация высоконагруженного проекта» Гузель Рахимова
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_rumcroitor
 
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
«Композитный сайт. Ускорение отдачи сайта в 100 раз» «Композитный сайт. Ускорение отдачи сайта в 100 раз»
«Композитный сайт. Ускорение отдачи сайта в 100 раз» Гузель Рахимова
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_rumcroitor
 
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Ontico
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)Ontico
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_rumcroitor
 
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис РечкуновJSib
 
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.jsВячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.jsYandex
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Ontico
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Ontico
 
Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)Timur Shemsedinov
 

La actualidad más candente (20)

Загрузка, обработка, хранение и отдача статики
Загрузка, обработка, хранение и отдача статикиЗагрузка, обработка, хранение и отдача статики
Загрузка, обработка, хранение и отдача статики
 
Chef
ChefChef
Chef
 
Михаил Юматов: SaltStack
Михаил Юматов: SaltStackМихаил Юматов: SaltStack
Михаил Юматов: SaltStack
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_ru
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
 
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
 
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеВладимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
 
«Разработка и оптимизация высоконагруженного проекта»
«Разработка и оптимизация высоконагруженного проекта» «Разработка и оптимизация высоконагруженного проекта»
«Разработка и оптимизация высоконагруженного проекта»
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_ru
 
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
«Композитный сайт. Ускорение отдачи сайта в 100 раз» «Композитный сайт. Ускорение отдачи сайта в 100 раз»
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_ru
 
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_ru
 
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
 
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.jsВячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
 
Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)
 
Применяем Ansible
Применяем AnsibleПрименяем Ansible
Применяем Ansible
 

Destacado

16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAXRoman Brovko
 
14 - Web-технологии. Обработка форм
14 - Web-технологии. Обработка форм14 - Web-технологии. Обработка форм
14 - Web-технологии. Обработка формRoman Brovko
 
12 - Web-технологии. Django модели
12 - Web-технологии. Django модели12 - Web-технологии. Django модели
12 - Web-технологии. Django моделиRoman Brovko
 
11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБДRoman Brovko
 
13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данных13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данныхRoman Brovko
 
01 - Системные требования
01 - Системные требования01 - Системные требования
01 - Системные требованияRoman Brovko
 
02 - Установка macOS
02 - Установка macOS02 - Установка macOS
02 - Установка macOSRoman Brovko
 
10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)Roman Brovko
 
03 - Установка Xcode
03 - Установка Xcode03 - Установка Xcode
03 - Установка XcodeRoman Brovko
 
04 - Практика UML. Описание прецедентов
04 - Практика UML. Описание прецедентов04 - Практика UML. Описание прецедентов
04 - Практика UML. Описание прецедентовRoman Brovko
 
04 - Web-технологии. CSS - язык описания стилей
04 - Web-технологии. CSS - язык описания стилей04 - Web-технологии. CSS - язык описания стилей
04 - Web-технологии. CSS - язык описания стилейRoman Brovko
 
03 - Web-технологии. Язык разметки HTML
03 - Web-технологии. Язык разметки HTML03 - Web-технологии. Язык разметки HTML
03 - Web-технологии. Язык разметки HTMLRoman Brovko
 
Практический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLNikolai Kireev
 
66 - Spring. Spring и JSF
66 - Spring. Spring и JSF66 - Spring. Spring и JSF
66 - Spring. Spring и JSFRoman Brovko
 
12 - Java. Разработка сетевых приложений на Java
12 - Java. Разработка сетевых приложений на Java12 - Java. Разработка сетевых приложений на Java
12 - Java. Разработка сетевых приложений на JavaRoman Brovko
 
09 - Java. Тестирование Java-программ
09 - Java. Тестирование Java-программ09 - Java. Тестирование Java-программ
09 - Java. Тестирование Java-программRoman Brovko
 
10 - Java. Многопоточность в Java: основы
10 - Java. Многопоточность в Java: основы10 - Java. Многопоточность в Java: основы
10 - Java. Многопоточность в Java: основыRoman Brovko
 
11 - Java. Многопоточность в Java: средства стандартной библиотеки
11 - Java. Многопоточность в Java:  средства стандартной библиотеки11 - Java. Многопоточность в Java:  средства стандартной библиотеки
11 - Java. Многопоточность в Java: средства стандартной библиотекиRoman Brovko
 
04-Hibernate. Создание проекта
04-Hibernate. Создание проекта04-Hibernate. Создание проекта
04-Hibernate. Создание проектаRoman Brovko
 
03-Hibernate. Документация
03-Hibernate. Документация03-Hibernate. Документация
03-Hibernate. ДокументацияRoman Brovko
 

Destacado (20)

16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX
 
14 - Web-технологии. Обработка форм
14 - Web-технологии. Обработка форм14 - Web-технологии. Обработка форм
14 - Web-технологии. Обработка форм
 
12 - Web-технологии. Django модели
12 - Web-технологии. Django модели12 - Web-технологии. Django модели
12 - Web-технологии. Django модели
 
11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД
 
13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данных13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данных
 
01 - Системные требования
01 - Системные требования01 - Системные требования
01 - Системные требования
 
02 - Установка macOS
02 - Установка macOS02 - Установка macOS
02 - Установка macOS
 
10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)
 
03 - Установка Xcode
03 - Установка Xcode03 - Установка Xcode
03 - Установка Xcode
 
04 - Практика UML. Описание прецедентов
04 - Практика UML. Описание прецедентов04 - Практика UML. Описание прецедентов
04 - Практика UML. Описание прецедентов
 
04 - Web-технологии. CSS - язык описания стилей
04 - Web-технологии. CSS - язык описания стилей04 - Web-технологии. CSS - язык описания стилей
04 - Web-технологии. CSS - язык описания стилей
 
03 - Web-технологии. Язык разметки HTML
03 - Web-технологии. Язык разметки HTML03 - Web-технологии. Язык разметки HTML
03 - Web-технологии. Язык разметки HTML
 
Практический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UML
 
66 - Spring. Spring и JSF
66 - Spring. Spring и JSF66 - Spring. Spring и JSF
66 - Spring. Spring и JSF
 
12 - Java. Разработка сетевых приложений на Java
12 - Java. Разработка сетевых приложений на Java12 - Java. Разработка сетевых приложений на Java
12 - Java. Разработка сетевых приложений на Java
 
09 - Java. Тестирование Java-программ
09 - Java. Тестирование Java-программ09 - Java. Тестирование Java-программ
09 - Java. Тестирование Java-программ
 
10 - Java. Многопоточность в Java: основы
10 - Java. Многопоточность в Java: основы10 - Java. Многопоточность в Java: основы
10 - Java. Многопоточность в Java: основы
 
11 - Java. Многопоточность в Java: средства стандартной библиотеки
11 - Java. Многопоточность в Java:  средства стандартной библиотеки11 - Java. Многопоточность в Java:  средства стандартной библиотеки
11 - Java. Многопоточность в Java: средства стандартной библиотеки
 
04-Hibernate. Создание проекта
04-Hibernate. Создание проекта04-Hibernate. Создание проекта
04-Hibernate. Создание проекта
 
03-Hibernate. Документация
03-Hibernate. Документация03-Hibernate. Документация
03-Hibernate. Документация
 

Similar a 15 - Web-технологии. Сессии и авторизация

"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter..."Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...MoscowJS
 
Web осень 2012 лекция 11
Web осень 2012 лекция 11Web осень 2012 лекция 11
Web осень 2012 лекция 11Technopark
 
Dev & test на windows azure
Dev & test на windows azureDev & test на windows azure
Dev & test на windows azureMicrosoft
 
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Alexey Kostin
 
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funWebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funAlexandr Khotemskoy
 
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
Безопасность веб-приложений.  Так ли опасна виртуальная угроза?Безопасность веб-приложений.  Так ли опасна виртуальная угроза?
Безопасность веб-приложений. Так ли опасна виртуальная угроза?phpdevby
 
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...Positive Hack Days
 
Михаил Сенин, Герман Андреев — Использование API Вебмастера в плагинах к CMS
Михаил Сенин, Герман Андреев — Использование API Вебмастера в плагинах к CMSМихаил Сенин, Герман Андреев — Использование API Вебмастера в плагинах к CMS
Михаил Сенин, Герман Андреев — Использование API Вебмастера в плагинах к CMSYandex
 
Антон Сапожников. Еще один недостаток современных клиент-серверных приложений
Антон Сапожников. Еще один недостаток современных клиент-серверных приложенийАнтон Сапожников. Еще один недостаток современных клиент-серверных приложений
Антон Сапожников. Еще один недостаток современных клиент-серверных приложенийPositive Hack Days
 
еще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийеще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийsnowytoxa
 
WebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий ОстапенкоWebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий ОстапенкоMail.ru Group
 
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QAFest
 
Яндекс.АккаунтМенеджер - Mobius 2015
Яндекс.АккаунтМенеджер - Mobius 2015Яндекс.АккаунтМенеджер - Mobius 2015
Яндекс.АккаунтМенеджер - Mobius 2015Yury Leonychev
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Technopark
 
Неочевидные возможности ускорения работы сайта
Неочевидные возможности ускорения работы сайтаНеочевидные возможности ускорения работы сайта
Неочевидные возможности ускорения работы сайтаNetpeak
 
Cоздание приложений со знанием Perl
Cоздание приложений со знанием PerlCоздание приложений со знанием Perl
Cоздание приложений со знанием PerlAnatoly Sharifulin
 

Similar a 15 - Web-технологии. Сессии и авторизация (20)

"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter..."Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
 
Web осень 2012 лекция 11
Web осень 2012 лекция 11Web осень 2012 лекция 11
Web осень 2012 лекция 11
 
Dev & test на windows azure
Dev & test на windows azureDev & test на windows azure
Dev & test на windows azure
 
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
 
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funWebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double fun
 
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
Безопасность веб-приложений.  Так ли опасна виртуальная угроза?Безопасность веб-приложений.  Так ли опасна виртуальная угроза?
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
 
алексей диплом презентация
алексей диплом презентацияалексей диплом презентация
алексей диплом презентация
 
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
 
Михаил Сенин, Герман Андреев — Использование API Вебмастера в плагинах к CMS
Михаил Сенин, Герман Андреев — Использование API Вебмастера в плагинах к CMSМихаил Сенин, Герман Андреев — Использование API Вебмастера в плагинах к CMS
Михаил Сенин, Герман Андреев — Использование API Вебмастера в плагинах к CMS
 
Антон Сапожников. Еще один недостаток современных клиент-серверных приложений
Антон Сапожников. Еще один недостаток современных клиент-серверных приложенийАнтон Сапожников. Еще один недостаток современных клиент-серверных приложений
Антон Сапожников. Еще один недостаток современных клиент-серверных приложений
 
еще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийеще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложений
 
WebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий ОстапенкоWebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий Остапенко
 
веб сервер
веб сервервеб сервер
веб сервер
 
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
 
Яндекс.АккаунтМенеджер - Mobius 2015
Яндекс.АккаунтМенеджер - Mobius 2015Яндекс.АккаунтМенеджер - Mobius 2015
Яндекс.АккаунтМенеджер - Mobius 2015
 
Скриншоты как сервис
Скриншоты как сервисСкриншоты как сервис
Скриншоты как сервис
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1
 
Неочевидные возможности ускорения работы сайта
Неочевидные возможности ускорения работы сайтаНеочевидные возможности ускорения работы сайта
Неочевидные возможности ускорения работы сайта
 
Cоздание приложений со знанием Perl
Cоздание приложений со знанием PerlCоздание приложений со знанием Perl
Cоздание приложений со знанием Perl
 

Más de Roman Brovko

Individual task Networking
Individual task NetworkingIndividual task Networking
Individual task NetworkingRoman Brovko
 
Networking essentials lect3
Networking essentials lect3Networking essentials lect3
Networking essentials lect3Roman Brovko
 
Gl embedded starterkit_ethernet
Gl embedded starterkit_ethernetGl embedded starterkit_ethernet
Gl embedded starterkit_ethernetRoman Brovko
 
Networking essentials lect2
Networking essentials lect2Networking essentials lect2
Networking essentials lect2Roman Brovko
 
Networking essentials lect1
Networking essentials lect1Networking essentials lect1
Networking essentials lect1Roman Brovko
 
Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flashRoman Brovko
 
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2CRoman Brovko
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uartRoman Brovko
 
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorRoman Brovko
 
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwmRoman Brovko
 
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsRoman Brovko
 
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_worldRoman Brovko
 
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisitesRoman Brovko
 
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advancedRoman Brovko
 
C language lect_22_advanced
C language lect_22_advancedC language lect_22_advanced
C language lect_22_advancedRoman Brovko
 
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advancedRoman Brovko
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окруженияRoman Brovko
 
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advancedRoman Brovko
 
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basicsRoman Brovko
 

Más de Roman Brovko (20)

Individual task Networking
Individual task NetworkingIndividual task Networking
Individual task Networking
 
Networking essentials lect3
Networking essentials lect3Networking essentials lect3
Networking essentials lect3
 
Gl embedded starterkit_ethernet
Gl embedded starterkit_ethernetGl embedded starterkit_ethernet
Gl embedded starterkit_ethernet
 
Networking essentials lect2
Networking essentials lect2Networking essentials lect2
Networking essentials lect2
 
Networking essentials lect1
Networking essentials lect1Networking essentials lect1
Networking essentials lect1
 
Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flash
 
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2C
 
Glesk worshop
Glesk worshopGlesk worshop
Glesk worshop
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uart
 
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensor
 
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwm
 
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttons
 
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_world
 
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisites
 
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advanced
 
C language lect_22_advanced
C language lect_22_advancedC language lect_22_advanced
C language lect_22_advanced
 
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advanced
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окружения
 
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advanced
 
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basics
 

15 - Web-технологии. Сессии и авторизация

  • 2. Авторизация в Web-приложениях HTTP - stateless протокол, т.е. не предполагает поддержания соединения между клиентом и сервером. Это значит, что сервер не может связать информацию о пользователе с конкретным соединением и вынужден загружать ее при каждом запросе. 2
  • 5. Заголовки и коды ответа •   401 Unauthorized - для доступа к ресурсу нужна авторизация •   WWW-Authenticate: Basic realm="admin" - запрос логина/ пароля для раздела admin •   Authorization: Basic Z2l2aTpkZXJwYXJvbA== - передача логина/пароля в виде base64(login + ':' + password) •   403 Forbidden - логин/пароль не подходят •   REMOTE_USER - CGI переменная с именем авторизованного пользователя 5
  • 6. Достоинства и недостатки ➕ Простота и надежность ➕ Готовые модули для web-серверов ➕ Не требует написания кода ➖ Логин/пароль передаются в открытом виде - нужен https ➖ Невозможно изменить дизайн формы входа ➖ Невозможно «сбросить» авторизацию 6
  • 8. Cookies Cookies - небольшие фрагменты данных, которые браузер хранит на стороне клиента и передает на сервер при каждом запросе. Cookies привязаны к доменам, поэтому при каждом запросе сервер получает только «свои» cookies. Невозможно получить доступ к cookies с другого домена. Cookies используются для поддержания состояния (state management) в протоколе HTTP и, в частности, для авторизации. 8
  • 9. Атрибуты Cookie •   name=value - имя и значение cookie •   Expires - время жизни cookie, по умолчанию - до закрытия окна. •   Domain - домен cookie, по умолчанию - домен текущего URL. •   Path - путь cookie, по умолчанию - путь текущего URL. •   Secure - cookie должна передаваться только по https •   HttpOnly - cookie не доступна из JavaScript 9
  • 10. Установка и удаление Cookies Set-Cookie: sessid=d232rn38jd1023e1nm13r25z; Domain=.site.com; Path=/admin/; Expires=Sat, 15 Aug 2015 07:58:23 GMT; Secure; HttpOnly Set-Cookie: lang=ru Set-Cookie: sessid=xxx; Expires=Sun, 06 Nov 1994 08:49:37 GMT Для удаления cookie, сервер устанавливает Expires в прошлом. 10
  • 11. Получение Cookies Cookie: sessid=d232rn38jd1023e1nm13r25z; lang=ru; csrftoken=vVqoyo5vzD3hWRHQDRpIHzVmKLfBQIGD; При каждом запросе браузер выбирает подходящие cookies и отправляет только их значения. 11
  • 12. Правила выбора Cookies Пусть URL= http://my.app.site.com/blog/post/12 Браузер выберет все cookies, у которых: •   Не истек срок Expires •   Domain совпадает с my.app.site.com или является .суффиксом, например Domain=.site.com •   Path является префиксом /blog/post/12 , например Path=/blog/ •   Не стоит флага Secure 12
  • 13. Работа с cookie в Django # установка resp.set_cookie('sessid','asde132dk13d1') resp.set_cookie('sessid','asde132dk13d1', domain='.site.com', path='/blog/', expires=(datettime.now() + timedelta(days=30))) # удаление resp.delete_cookie('another') # получение request.COOKIES # все cookies request.COOKIES.get('sessid') # одна cookie 13
  • 16. Необходимые модели class User(models.Model): login = models.CharField(unique=True) password = models.CharField() name = models.CharField() class Session(models.Model): key = models.CharField(unique=True) user = models.ForeignKey(User) expires = models.DateTimeField() 16
  • 17. Вход на сайт URL = /login/ •   Клиент отправляет login / password на сервер •   Сервер проверяет login / password и создает сессию •   Сервер устанавливает cookie, содержащий ключ сессии •   Сервер делает перенаправление на целевую страницу 17
  • 18. def login(request): error = '' if request.method == 'POST': login = request.POST.get('login') password = request.POST.get('password') url = request.POST.get('continue', '/') sessid = do_login(login, password) if sessid: response = HttpResponseRedirect(url) response.set_cookie('sessid', sessid, domain='.site.com', httponly=True, expires = datetime.now()+timedelta(days=5) ) return response else: error = u'Неверный логин / пароль' return render(request, 'login.html', {'error': error }) 18
  • 19. def do_login(login, password): try: user = User.objects.get(login=login) except User.DoesNotExist: return None hashed_pass = salt_and_hash(password) if user.password != hashed_pass return None session = Session() session.key = generate_long_random_key() session.user = user session.expires = datetime.now() + timedelta(days=5) session.save() return session.key 19
  • 20. Проверка сессии При запросе по любому URL: •   Клиент передает в заголовке Cookie свой sessid •   Сервер загружает сессию из базы данных по sessid •   Сервер загружает объект пользователя по id из сессии Как правило, для проверки сессии используются middleware . 20
  • 21. Middleware в Django Middleware - это Python класс, в котором есть один из указанных ниже методов. Список всех активных middleware указан в настройке MIDDLEWARE_CLASSES . •   process_request(request) •   process_view(request, view, args, kwargs) •   process_response(request, response) •   process_exception(request, exception) 21
  • 22. # project/project/middleware.py class CheckSessionMiidleware(class): def process_request(request): try: sessid = request.COOKIE.get('sessid') session = Session.objects.get( key=sessid, expires__gt=datetime.now(), ) request.session = session request.user = session.user except Session.DoesNotExist: request.session = None request.user = None 22
  • 23. Выход из приложения Для выхода из приложения достаточно удалить объект сессии: def logout(request): sessid = request.COOKIE.get('sessid') if sessid is not None: Session.objects.delete(key=sessid) url = request.GET.get('continue', '/') return HttpResponseRedirect(url) 23
  • 25. django.contrib.sessions Предоставляет поддержку сессий, в том числе анонимных. Позволяет хранить в сессии произвольные данные, а не только ID пользователя. Позволяет хранить сессии в различных хранилищах, например Redis или Memcached. def some_view(request): val = request.session['some_name'] request.session.flush() request.session['some_name'] = 'val2' 25
  • 26. django.contrib.auth Предоставляет готовую модель User , готовую систему разделения прав, view для регистрации / входа / выхода. Используется другими приложениями, например django.contrib.admin def some_view(request): user = request.user # Определено всегда! if user.is_authenticated(): pass # обычный пользователь else: pass # анонимный пользователь 26
  • 28. Безопасность паролей Главная задача - максимально затруднить доступ злоумышленника к исходному паролю пользователя. Меры безопасности: •   Отправка формы входа (login / password) по https •   Пароли хранятся в виде хэшей с добавлением соли •   Защита от перебора в форме логина, например captcha 28
  • 29. Безопасность сессий Основное направление атаки - кража cookie, хранящей ключ сессии, т.е. кража авторизации. Меры безопасности: •   Ключ сессии невозможно подобрать перебором •   HttpOnly флаг для сессионной cookie •   Привязка сессии к IP адресу •   Ограничение сессий по времени •   Запрос пароля при критических действиях: смене пароля и т.д. 29