ярослав рабоволюк
TRANSCRIPT
2
безопасность клиентской части
- цель атаки: пользователь, его браузер- доступность: веб-сайт открыт злоумышленнику- распространенность
- xss- csrf- clickjacking- фиксация сессии- расщепление запросов- открытый редирект...
3
XSS
- отраженная ( reflective )- сохраненная (stored)- на основе обьектной модели (DOM-based)
внедрение подконтрольного злоумышленником html-кода в контекст браузера пользователя
5
XSS:reflective:пример
http://site.com?username=’><script>payload</script>
site.com:
<input type=’text’ name=‘username’ value=’’><script>payload</script>’>
8
XSS:stored:пример
POST site.com?addmsgmsg=<script>payload</script>
site.com/getmsg?id=1234
<div class=‘message’><script>payload</script></div>
11
XSS: пример векторов атаки
1. <script>a=param;</script>
2. <a href=‘http://param‘>
3. <img src=‘param’>
4. <div style=’background-url: “param”;’>
http://site.com?param=1;function()
http://site.com?param=’><script>function()</script>
http://site.com?param=crap’ onerror=‘function()
http://site.com?param=javascript:function()
Цель: выполнение function() в контексте сайта site.com
12
XSS: защита
1. не использовать недоверенные данные в местах, в которых санитизация в принципе невозможна. <script>param</script>
<script src=‘param’><!-- param --><tag param><param><style>param</style>
13
XSS: защита
1. не использовать недоверенные данные в местах, в которых санитизация в принципе невозможна.2. санитизация данных в зависимости от места их применения
html:<div>param</div>attribute value:<div class=‘param’>javascript:<script>a=‘param’;</script>css style property:<div style=‘background-url:’param’>url:<a href=‘param’>
14
XSS: защита
1. не использовать недоверенные данные в местах, в которых санитизация в принципе невозможна.2. санитизация данных в зависимости от места их применения:html,attribute,javascript,css,url3. применение правил фильтрации ко всем источникам пользовательских данных
- GET/POST/COOKIE
- storage
- json
15
XSS: защита
1. не использовать недоверенные данные в местах, в которых санитизация в принципе невозможна.2. санитизация данных в зависимости от места их применения:html,attribute,javascript,css,url3. применение правил фильтрации ко всем источникам пользовательских данных5. флаг HttpOnly
17
пользовательский html
Что делать, если необходимо использовать пользовательский контент:
НЕ ДЕЛАЙТЕ ЭТОГО!
18
пользовательский html
Что делать, если необходимо использовать пользовательский контент:
1. в iframe с отдельного домена2. whitelist тегов и аттрибутов3. пре/постмодерация4. желательно рассмотреть возможность “языка разметки”
19
CSRF
EVILSITE
EVILSITE
user attackerevilsite
user<html>...<img src=‘http://target/action’>...</html>
TARGET user
вызов функций сайта от лица аутентифицированного пользователя
20
CSRF: защита
1. Referer check 2. использование security tokens3. challenge-response
& POST method
21
CLICKJACKING
evilsite, cursorjacking:cursor:url("img.png")
OKOK
evilsite, likejacking:addEventListener(‘mousemove’...+iframe
OK
26
ресурсы
https://www.owasp.org
http://code.google.com/p/browsersec/wiki/Main
http://html5sec.org/
http://www.mniemietz.de/demo/cursorjacking/cursorjacking.html