Безопасность веб-приложений. Исчерпывающий гид для начинающих разработчиков
Реклама. ООО «ЛитРес», ИНН: 7719571260.
Оглавление
Группа авторов. Безопасность веб-приложений. Исчерпывающий гид для начинающих разработчиков
Отзывы о книге. Тани Янка «Безопасность веб-приложений. Визуальный гид для начинающих разработчиков»
Об авторе
О технических редакторах
Благодарности
Предисловие
Введение
Сдвиг влево
О книге
Темы, выходящие за рамки книги
Ответы
Часть I. Все, что нужно знать о коде, безопасном для публикации в интернете
Глава 1. Основы безопасности
Обязательство по обеспечению безопасности: «CIA»
Конфиденциальность
Целостность
Доступность
«Предполагать взлом»
Внутренние угрозы
Глубокая защита
Принцип наименьших привилегий
Безопасность цепи поставок
Безопасность через неясность
Уменьшение поверхности атаки
Жесткое кодирование
«Никогда не доверяй, всегда проверяй»
Удобство и безопасность
Факторы аутентификации
Упражнения
Глава 2. Требования безопасности
Требования
Шифрование
Никогда нельзя доверять входному потоку системы
Кодирование и экранирование
Сторонние компоненты
Заголовки безопасности: ремни безопасности для веб-приложений
Заголовки безопасности на практике
Х-XSS-Protection
Content-Security-Policy (CSP)
X-Frame-Options
X–Content-Type-Options
Referrer-Policy
Strict-Transport-Security (HSTS)
Feature-Policy
X-Permitted-Cross-Domain-Policies
Expect-CT
Public Key Pinning Extension for HTTP (HPKP)
Обеспечение безопасности файлов cookies
Флаг Secure
Флаг HTTPOnly
Для постоянных cookies
Domain
Path
Same-site
Cookie с префиксом
Политика конфиденциальности
Классификация данных
Пароли, хранилище и другие важные решения, касающиеся обеспечения безопасности
HTTPS повсюду
Настройки TLS
Комментарии
Резервное копирование и восстановление
Элементы безопасности платформы
Технический долг = Долг безопасности
Загрузка файлов
Ошибки и их регистрация
Проверка и санитизация вводимых значений
Авторизация и аутентификация
Параметризированные запросы
Параметры URL
Принцип наименьших привилегий
Чек-лист требований
Упражнения
Глава 3. Безопасность при проектировании ПО
Ошибка проектирования и дефект безопасности
Позднее обнаружение ошибки проектирования
Сдвиг влево
Концепции проектирования безопасного ПО
Защита конфиденциальных данных
«Никогда не доверяй, всегда проверяй» и «Предполагать взлом»
Резервное копирование и откат
Валидация на стороне сервера
Функции безопасности платформы
Изоляция функций безопасности
Разделение приложения
Управление секретами приложения
Повторная аутентификация при транзакционных операциях (предотвращение CSRF-атаки)
Разделение производственных данных
Защита исходного кода
Моделирование угроз
Упражнения
Глава 4. Безопасность кода ПО
Выбор используемой платформы и языка программирования
Пример 1
Пример 2
Пример 3
Языки программирования и платформы: правило
Сомнительные данные
HTTP-глаголы
Идентификация
Управление сессиями
Проверка границ
Аутентификация (AuthN)
Авторизация (AuthZ)
Обработка, регистрация и мониторинг ошибок
Правила работы с ошибками
Регистрация
Мониторинг
Упражнения
Глава 5. Часто встречающиеся подводные камни
OWASP
Ранее не упомянутые средства защиты и уязвимости
Межсайтовая подделка запроса (CSRF)
Подделка запросов со стороны сервера (SSRF)
Десериализация
Состояние гонки
Заключительные комментарии
Упражнения
Часть II. Как написать безупречный код
Глава 6. Тестирование и развертывание
Тестирование кода
Обзор кода
Статическое тестирование безопасности приложений (SAST)
Анализ состава программного обеспечения (SCA)
Модульное тестирование
Инфраструктура как код (IaC) и безопасность как код (SaC)
Тестирование приложения
Ручное тестирование
Браузеры
Инструменты разработчика
Веб-прокси
Фаззинг
Динамическое тестирование безопасности приложений (DAST)
Инфраструктура
Пользовательские приложения
Оценка уязвимости, оценка безопасности, пентестирование
Гигиена безопасности
Стресс-тестирование и тестирование производительности
Интеграционное тестирование
Интерактивное тестирование безопасности приложений
Регрессионное тестирование
Тестирование инфраструктуры
Тестирование базы данных
Тестирование API и веб-серверов
Тестирование интеграций
Тестирование сети
Развертывание
Редактирование кода на сервере в реальном времени
Публикация из среды IDE
«Самодельные» системы развертывания
Ранбуки
Непрерывная интеграция, непрерывная поставка, непрерывное развертывание
Упражнения
Глава 7. Программы безопасности приложений
Задачи программы по защите приложения
Создание и поддержка реестра приложения
Техническая возможность обнаружения уязвимостей в написанном, выполняемом и стороннем коде
Знания и ресурсы, необходимые для исправления уязвимостей
Образование и справочные материалы
Предоставление разработчикам инструментов по обеспечению безопасности приложений
Проведение одного или нескольких мероприятий по обеспечению безопасности на каждом этапе жизненного цикла разработки системы
Внедрение полезных и эффективных инструментов
Команда реагирования на инциденты, которая знает, когда вам звонить
Постоянное совершенствование программы на основе показателей, экспериментов и обратной связи
Метрики
Экспериментирование
Обратная связь от всех и каждой из заинтересованных сторон
Особое замечание о DevOps и Agile
Деятельность по обеспечению безопасности приложений
Инструменты по обеспечению безопасности приложений
Ваша программа безопасности приложения
Упражнения
Глава 8. Обеспечение безопасности современных систем и приложений
API и микросервисы
Онлайн-хранилище
Контейнеры и оркестровка
Бессерверные приложения
Инфраструктура как код (IaC)
Безопасность как код (SaC)
Платформа как услуга (PaaS)
Инфраструктура как услуга (IaaS)
Непрерывные интеграция, поставка и развертывание
Dev(Sec)Ops
DevSecOps
Облако
Облачные вычисления
Ориентированность на облако
Безопасность облачно-ориентированной среды
Облачные потоки
Современные инструменты
Интерактивное тестирование безопасности приложений IAST
Запуск защиты приложений
Контроль целостности файлов
Инструменты контроля приложений (список одобренного программного обеспечения)
Инструменты безопасности, созданные для конвейеров DevOps
Инструменты инвентаризации приложений
Автоматизация политики наименьших привилегий и других
Современные тактические приемы
В итоге
Упражнения
Часть III. Полезная информация о том, как постоянно писать код очень высокого качества
Глава 9. Полезные привычки
Управление паролями
Отмена правил сложности пароля
Использование менеджера паролей
Парольные фразы
Отказ от повторного использования паролей
Отказ от ротации паролей
Многофакторная аутентификация
Реагирование на инциденты
Пожарные учения
Непрерывное сканирование
Технический долг
Инвентаризация
Другие полезные привычки
Политики
Загрузки и устройства
Блокировка рабочей техники
Приватность
Итоги
Упражнения
Глава 10. Непрерывное обучение
Что изучать
Нападение = защита
Не забывайте о «гибких навыках»
Лидерство!= менеджмент
Варианты обучения
Действия, которые можно выполнять самостоятельно
Действия, которые можно выполнять на работе (или о чем можно попросить начальника)
Действия, которые можно выполнять в отношении своих сотрудников
Подотчетность
Составление плана
Действуйте
Упражнения
Учебный план
Глава 11. Заключение
Вопросы, оставшиеся без ответа
Когда можно говорить о достаточности предпринятых мер по обеспечению безопасности?
Как привлечь руководство к обеспечению безопасности?
Как привлечь разработчиков к обеспечению безопасности?
С чего начать?
Откуда брать помощь?
Заключение
Приложение. Ответы
Отрывок из книги
Таня Янка, также известная под ником SheHacksPurple, является основательницей We Hack Purple, онлайн-академии, сообщества и канала подкастов, цель которых – обучение всех желающих созданию безопасного программного обеспечения. Она также является соучредителем компании WoSEC: Women of Security, руководит проектом OWASP DevSlop и отделением OWASP Victoria. Таня занимается программированием и работает в области IТ более двадцати лет. За это время она завоевала множество наград, успела потрудиться везде, от стартапов до государственных организаций и технологических гигантов (Microsoft, Adobe и Nokia). Она занимала различные должности: была основателем стартапа, пентестером (тестировщиком, проверяющим уязвимость киберзащиты информационной системы), директором по информационной безопасности, инженером по безопасности приложений и разработчиком программного обеспечения. Будучи превосходным оратором, активным блогером и стримером, она провела сотни выступлений и тренингов на шести континентах. Она ценит разнообразие, вовлеченность и человеколюбие, что проявляется в ее бесчисленных инициативах.
Эли Саад – опытный специалист в области информационной безопасности, работающий в банковской сфере. Он участвует в различных инициативах OWASP по стандартизации и регулярно публикует статьи по этой теме. Его основная цель – дать разработчикам программного обеспечения рекомендации по обеспечению безопасности и защите. Он провел несколько лекций, в которых знакомил новичков с безопасностью, и был гостем подкаста на платформе Security Journey, где рассказывал о различных проектах, связанных с безопасностью приложений. Он является сторонником разрушения фрагментированной культуры в мире безопасности приложений. Кроме того, Эли с удовольствием находит время для более простых вещей в жизни, хорошей передышки в горах и стакана вкусного виски (односолодового, конечно). Вы можете найти его в Twitter (@7hunderSon) и на GitHub (thunderson). С ним можно связаться также по электронной почте eliesaad7@gmail.com.
.....
• Создание сервисной учетной записи в приложении для входа в базу данных и предоставление разрешения на чтение и запись, но не доступ владельца базы данных (Database owner, DBO). Если приложению требуется доступ только для чтения, дайте ему не более того, что необходимо для нормальной работы. Сервисная учетная запись с доступом к базе данных только для чтения не может быть использована для изменения или удаления каких-либо данных, даже если через нее можно украсть копии данных. Все вышеперечисленное значительно снижает риски.
Каждый элемент, используемый для создания продукта, считается частью «цепи поставок». Цепь включает в себя участника (поставщика) от каждого элемента (производителя, магазина, фермы, человека и т. д.). Она называется цепью, так как при создании конечного продукта каждая ее часть зависит от предыдущей. Звеньями цепи могут быть люди, компании, природные или промышленные ресурсы, информация, лицензии и все, что необходимо для создания конечного продукта (который не обязательно должен быть физическим по своей природе).
.....