Наш backend-разработчик Коля прочитал популярную книгу Тани Янки «Безопасность web-приложений» и заметил, что многие советы либо устарели, либо проходят в категории капитана Очевидность. Например, в книге присутствуют советы вроде «резервные копии бесполезны, если их нельзя использовать для восстановления данных», или «сделайте пароль подлиннее, чтобы он был безопаснее». В ответ на такие очевидные истины возникает закономерный вопрос — а применимо ли что-то из этого к реальным задачам разработки? Поэтому после прочтения Николай книгу не сжег, а выделил из прочитанного ряд полезных идей, дополнил это актуальными инструментами и объединил это все в статье.
По мере чтения книги меня все больше терзали вопросы: «Зачем это все?» и «Что это нам дает на практике?». На почти 450 страницах автор подробно рассказывает о важности базовых мер безопасности, но большая часть информации вызывает недоумение: советы повторяются, иногда по десять раз, а примеры порой настолько просты, что напоминают инструкции для новичков. Я постарался отфильтровать самое полезное из этой книги и дополнил проверенными инструментами, которые сам знаю и которыми пользуюсь.
Безопасность на этапе проектирования
- Кто?
- Что?
- Зачем?
- Как злоумышленник может изменить данные для аутентификации?
- Что происходит, когда злоумышленник может прочитать данные профиля пользователя?
- Что происходит, когда доступ к базе данных профилей пользователя запрещен?
OWASP Top 10
- нарушение контроля доступа;
- недочёты криптографии;
- инъекции;
- небезопасный дизайн;
- небезопасная конфигурация;
- использование уязвимых или устаревших компонентов;
- ошибки идентификации и аутентификации;
- нарушения целостности программного обеспечения и данных;
- ошибки логирования и мониторинга безопасности;
- подделка запросов на стороне сервера.
<script>alert("XSS атака!")</script>
Для защиты от SSRF важно:
- ограничить разрешенные адреса и проверять ссылки;
- ограничивать доступ к внутренним сервисам через сетевые правила и фильтрацию;
- использовать списки доверенных доменов, с которых можно загружать ресурсы.
Под конец в книге все же оказались полезные моменты, в том числе некоторые методы для выявления уязвимостей, о которых даже опытные разработчики могут слышать впервые. Но тут, как и раньше, информация в книге скудна, так что пришлось дополнительно разбираться самостоятельно. Давайте кратко пройдемся по этому.