10. XSS: возможности
1. кража сессии
2. обход firewall/NAT
3. заражение вирусами, drive
by download)
10
11. XSS: пример векторов атаки
Цель: выполнение function() в контексте сайта site.com
1. <script>a=param;</script> http://site.com?param=1;function()
2. <a href=‘http://param‘> http://site.com?param=’><script>function()</script>
3. <img src=‘param’> http://site.com?param=crap’ onerror=‘function()
4. <div style=’background-url: “param”;’> http://site.com?param=javascript:function()
11
12. XSS: защита
1. не использовать недоверенные данные в местах, в
которых санитизация в принципе невозможна. <script>param</script>
<script src=‘param’>
<!-- param -->
<tag param>
<param>
<style>param</style>
12
13. XSS: защита
1. не использовать недоверенные данные в местах, в html:
которых санитизация в принципе невозможна. <div>param</div>
2. санитизация данных в зависимости от места их attribute value:
применения <div class=‘param’>
javascript:
<script>a=‘param’;</script>
css style property:
<div style=‘background-url:’param’>
url:
<a href=‘param’>
13
14. XSS: защита
1. не использовать недоверенные данные в местах, в
которых санитизация в принципе невозможна. - GET/POST/COOKIE
2. санитизация данных в зависимости от места их
применения:html,attribute,javascript,css,url - storage
3. применение правил фильтрации ко всем источникам
пользовательских данных - json
14
15. XSS: защита
1. не использовать недоверенные данные в местах, в
которых санитизация в принципе невозможна.
2. санитизация данных в зависимости от места их
применения:html,attribute,javascript,css,url
3. применение правил фильтрации ко всем источникам
пользовательских данных
5. флаг HttpOnly
15
16. пользовательский html
Что делать, если необходимо использовать пользовательский контент:
16
17. пользовательский html
Что делать, если необходимо использовать пользовательский контент:
НЕ ДЕЛАЙТЕ ЭТОГО!
17
18. пользовательский html
Что делать, если необходимо использовать пользовательский контент:
1. в iframe с отдельного домена
2. whitelist тегов и аттрибутов
3. пре/постмодерация
4. желательно рассмотреть возможность “языка разметки”
18
19. CSRF
вызов функций сайта от лица аутентифицированного пользователя
evilsite
EVILSITE attacker user
<html>
user EVILSITE
...
<img src=‘http://target/action’> user TARGET
...
</html>
19
20. CSRF: защита
1. Referer check
2. использование security tokens & POST method
3. challenge-response
20