11. Что будем тестировать?
• Входящие данные от пользователя
• Ответы сервера
• Защиту от перебора
• Безопасные механизмы аутентификации
• Работа с пользовательскими сессиями
• Шифрование трафика
12. Some Origin Policy
Код из одного источника не может читать или
изменять DOM-объекты другого источника
13. Some Origin Policy
«Свой локоть укусить нельзя. Но есть
способ укусить, используя соседскую
собачку»
32. Cross-Site Scripting
XSS позволяет делать с уязвимым сайтом
то же самое, что может делать
пользователь загрузивший XSS скрипт
Например, с помощью BеEF или Metasploit
41. Защита от перебора
Что проверяем?
• Форму аутентификации
• Форму регистрации
• Восстановление пароля
• Изменение данных в ЛК
42. Защита от перебора
• Запрещаем вводить слабые пароли
(https://github.com/dropbox/zxcvbn - это поможет)
• Не даем подсказок. Только общие фразы:
“Неверный логин или пароль”
“Ссылка отправлена на ваш email” / “Код - на телефон”
• Captcha, например, Google ReCaptcha после 3-5 попыток (www.free-ocr.com)
• Timeout после 13-15 попыток
• Проверяем, учитывается ли значение капчи в POST запросе
• Код ответа HTTP = 200
• Логируем все попытки аутентификации (время; IP; учетка; результа; …)
43. Защищаем поля ввода
• Проверяем на инъекции (XSS magic string - ‘';!--
"<XSS>=&{()})
• Все поля ввода валидируются на сервере
• Используем HTTP header Cache-Control: private, no-cache,
no-store, max-age=0
44. Восстановление пароля (Capability
URLs)
• URL содержит уникальный токен (рекомендуется, UUID)
• UUID не должен генерироваться детерминированным способом типа
md5(username)
• UUID имеет ограниченный срок действия (максимум, сутки)
• UUID Не действует после сброса пароля
• URL работает только по HTTPS
• Страницы доступные через URL должны быть закрыты от индексации
роботами
https://w3ctag.github.io/capability-urls/
45. Изменение аутентификационных
данных в ЛК
• Используем анти-CSRF токен в POST запросах (не GET),
который обрабатывается на сервере
• Один анти-CSRF токен действует только для одного
пользователя
• При изменении пароля повторяем механизм восстановления
пароля
46. Защита от clickjacking
• Ответ сервера содержит заголовок
X-Frame-Options Deny
на страницах, не предназначенных для запуска
во фреймах
• Используются ли сторонние сервисы/ плагины?
Разбираемся, как они работают.
48. Дополнительная защита от XSS
• Ответ сервера содержит заголовок
Content-Security-Policy: script-src ‘self'
• Ответ сервера содержит заголовок
Set-Cookie: … ; secure; HttpOnly
• Ответ сервера содержит заголовок
X-XSS-Protection: 1; mode=block
• Ответ сервера содержит заголовок
x-content-type-options:nosniff
www.securityheaders.io
49. 1. OWASP Authentication Cheat Sheet
(https://www.owasp.org/index.php/Authentication_Cheat_She
et)
2. Dos and Don’ts of Client Authentication on the Web
(https://pdos.csail.mit.edu/papers/webauth:sec10.pdf)
3. http://www.webappsec.org
4. http://seclists.org
5. https://www.seekurity.com
6. http://hackerone.com
Что почитать?