Разработка безопасных, надежных веб -приложений в облаке — это жесткий , очень сложно. Если вы думаете, что это легко, вы либо более высокая форма жизни, либо у вас есть болезненное пробуждение впереди вас.
Если вы выпили MVP Cool-Aid и полагайте, что вы можете создать продукт за один месяц, который является и ценным, и безопасным-подумайте дважды, прежде чем запустить свой «прото-продукт».
После того, как вы просмотрите контрольный список ниже, признайте, что вы пропускаете многие из этих критических проблем безопасности. Как минимум, будь честный С вашими потенциальными пользователями и дайте им знать, что у вас еще нет полного продукта, и вы предлагаете прототип без полной безопасности.
Этот контрольный список прост и ни в коем случае не завершен. Я разрабатывал безопасные веб -приложения в течение более 14 лет, и этот список содержит некоторые из наиболее важных вопросов, которые я мучительно узнал за этот период. Я надеюсь, что вы серьезно рассмотрите их при создании веб -приложения.
Это версия 2 контрольного списка. Он был реорганизован из Версия 1 и имеет несколько новых предметов по общественному спросу (спасибо). Хотя я стараюсь держать список плотно и сфокусированным, пожалуйста, прокомментируйте, если у вас есть элемент, который, по вашему мнению, я должен добавить в список.
Условия и секреты
[] Храните и распространяйте секреты, используя магазин ключей, предназначенный для этой цели. Не в своих приложениях не храните в своих приложениях и определенно не храните в GitHub!. Для фанатов CMS не храните свои учетные данные в файле в каталоге документов.
[] Используйте командный менеджер паролей, такой как 1Password Для всех паролей службы и учетных данных. Никогда не отправляйте пароли или учетные данные членам команды.
[] Используйте многофакторную аутентификацию для всех ваших входа для поставщиков услуг.
Аутентификация
[] Убедитесь, что все пароли хэшируются с использованием соответствующего крипто, таких как Bcrypt . Никогда не пишите свой собственный крипто и правильно инициализируйте крипто с хорошими случайными данными. Подумайте об использовании службы аутентификации, такой как Auth0 или AWS Cognito Анкет
[] Используйте наилучшие практики и проверенные компоненты для входа в систему, забыли пароль и другой сброс пароля. Не изобретайте свой собственный — трудно получить это во всех сценариях.
[] Реализуйте простые, но адекватные правила пароля, которые побуждают пользователей иметь долгие, случайные пароли.
[] Никогда, никогда не имели никаких недокументированных и неопубликованных средств доступа к устройству, включая учетные записи на задней стороне (например, «полевой сервис»).
[] Запустите приложения и контейнеры с минимальной привилегией и никогда не как root (Примечание: Docker запускает приложения как root по умолчанию).
База данных
[] Не храните конфиденциальные данные, если только вам не нужны. Это означает адреса электронной почты, лично идентифицируя информацию и другую личную информацию в целом. Обработайте конфиденциальные данные, такие как радиоактивные отходы, то есть существует реальная, большая и постоянная стоимость для их обеспечения, и однажды это может повредить вам.
[] Сохраните полный список всех мест, где вы храните конфиденциальную информацию: базы данных, файловые системы, Dropbox, Github, Vault, Office Docs и даже бумажную папку. Это полезно для управления, требуемого GDPR и необходимо, если взломать. Вы должны иметь возможность найти всю конфиденциальную информацию.
[] Если подлежит GDPR, убедитесь, что вы действительно понимаете требования и разработайте их с самого начала. Для некоторых это будет представлять собой значительное изменение в дизайне и мышлении. Смотрите и Вступление в GDPR Анкет
[] Используйте шифрование для идентификационных пользователей данных и конфиденциальных данных, таких как токены доступа, адреса электронной почты или данные выставления счетов, если это возможно (это будет ограничивать запросы точными поисками совпадений).
[] Если ваша база данных поддерживает недорогой шифрование в состоянии покоя (например, aws aurora ), тогда включите, чтобы получить данные на диске. Убедитесь, что все резервные копии также хранятся зашифрованы.
[] Используйте минимальную привилегию для учетной записи пользователя доступа к базе данных. Не используйте корневую учетную запись базы данных и проверяйте неиспользованные учетные записи и учетные записи с плохими паролями.
[] Полностью предотвратите инъекцию SQL, только с помощью SQL -подготовленных операторов. Например: при использовании NPM не используйте NPM-MYSQL, используйте NPM-MySQL2, который поддерживает подготовленные операторы.
Программы
[] Безопасные системы разработки с равной бдиной на то, что вы используете для производственных систем. Создайте программное обеспечение из защищенных изолированных систем разработки.
[] Убедитесь, что все компоненты вашего программного обеспечения будут отсканированы на предмет уязвимостей для каждой версии, выдвинутой для производства. Это означает O/S, библиотеки и пакеты. Это должно быть автоматизировано в CI-CD процесс.
[] Сделайте проверку ввода на стороне клиента для быстрого отзывов пользователей, но никогда не доверяйте ей. Всегда проверяйте и кодируйте ввод пользователя перед отображением.
[] Проверьте каждый последний бит пользовательского ввода, используя белые списки на сервере. Рассмотрим создание кода проверки из спецификаций API, используя такой инструмент, как Чванство , это более надежно, чем сгенерированный вручную код.
[] Никогда не вводят пользовательский контент в ответы. Никогда не используйте ненадежный пользовательский ввод в операторах SQL или другой логике на стороне сервера.
[] Используйте централизованный журнал для всех приложений, серверов и серверов. Вам никогда не нужно SSH для доступа или получения журналов.
[] Войдите с достаточными деталями, чтобы диагностировать все проблемы с эксплуатацией и безопасности и никогда не регистрировать конфиденциальную или личную информацию. Подумайте о создании журналов в JSON с Высокая кардинальность Поля, а не плоские текстовые линии.
[] Не издавайте раскрывающие данные об ошибках или трассировки стека для пользователей и не развертывайте свои приложения для производства с помощью отладки.
Апис
[] Убедитесь, что пользователи полностью аутентифицируются и авторизованы надлежащим образом при использовании ваших API.
[] Убедитесь, что в ваших публичных API нет ресурсов. Для идентификаторов рассмотрите возможность использования RFC 4122 Соответствует UUIDS вместо целых чисел. Для узла см. Npm uuid Анкет
[] Используйте канарейские проверки в API, чтобы обнаружить незаконные или ненормальные запросы, которые указывают на атаки.
Сетевой трафик
[] Сегментируйте свою сеть и защитите конфиденциальные услуги. Используйте брандмауэры, виртуальные частные сети и группы облачной безопасности, чтобы ограничить и контролировать входящий и исходящий трафик до/из соответствующих направлений. AWS и Cloudflare Оба имеют отличные предложения.
[] Используйте TLS для всего сайта, а не только для входа в систему и ответы. Никогда не используйте TLS только для формы входа в систему. Переход, используйте заголовок строгого транспорта и безопасности, чтобы заставить HTTPS по всем запросам.
[] Файлы cookie должны быть httponly и безопасны и быть охватываемыми путем и доменом.
[] Используйте CSP не допуская небезопасных бэкдоров. Это боль для настройки, но стоит. Используйте CSP СУБРЕСОРСА ЧЕСТВАЯ Для содержания CDN.
[] Используйте x-frame-option, заголовки X-XSS-защиты в ответах клиентов. Используйте https://observatory.mozilla.org Чтобы забить ваш сайт.
[] Используйте ответы HSTS для принудительного доступа TLS. Перенаправить весь HTTP -запрос на HTTPS на сервере в качестве резервного копирования.
[] Используйте токены CSRF во всех формах и используйте новый SameSite Cookie Заголовок ответа, который исправляет CSRF раз и для всех новых браузеров.
[] Удалите другие идентификационные заголовки, которые могут облегчить работу хакеров и выявить ваши версии стека и программного обеспечения.
[] Не используйте запросы GET с конфиденциальными данными или токенами в URL, так как они будут регистрироваться на серверах и прокси.
Облачная конфигурация
[] Убедитесь, что все услуги имеют минимальные порты. В то время как безопасность через безвестность не является защитой, использование нестандартных портов сделает его немного сложнее для злоумышленников.
[] База данных и сервисы хоста на частных VPC, которые не видны в какой -либо публичной сети. Будьте очень осторожны при настройке групп безопасности AWS и вставки VPC, которые могут непреднамеренно сделать услуги видимыми для общественности.
[] Создайте тест и постановку ресурсов в отдельной учетной записи AWS, который используется производственными ресурсами.
[] Изолируют логические услуги в отдельных VPC и одноранговых VPC для обеспечения межподобия.
[] Убедитесь, что все услуги принимают данные только из минимального набора IP -адресов.
[] Ограничьте исходящий IP и порт трафик, чтобы минимизировать приложения и «уведомление».
[] Всегда используйте роли AWS IAM, а не корневые учетные данные.
[] Используйте минимальную привилегию доступа для всех сотрудников OPS и разработчиков.
[] Регулярно поверните пароли и клавиши доступа в соответствии с расписанием.
Инфраструктура
[] Убедитесь, что вы можете сделать обновления без простоя. Убедитесь, что вы можете быстро обновить программное обеспечение полностью автоматизированным образом.
[] Создайте всю инфраструктуру, используя такой инструмент, как Terraform и не через облачную консоль. Инфраструктура должна быть определена как «код» и быть в состоянии воссоздана на нажатию кнопки. Иметь нулевую толерантность к любому ресурсу, созданному в облаке вручную — Terraform может затем проверить вашу конфигурацию.
[] Не входите в услуги, кроме разовой диагноза. Использование SSH регулярно, как правило, означает, что вы не автоматизировали важную задачу.
[] Не держите порт 22 открытым на любых сервисных группах AWS на постоянной основе. Если вы должны использовать SSH, используйте только аутентификацию открытого ключа, а не пароли.
[] Создать неизменные хосты Вместо долгоживущих серверов, которые вы исправляете и обновляете. (См. Необываемая инфраструктура может быть более безопасной )
[] Если не использовать неизменную инфраструктуру (плохая), убедитесь, что у вас есть автоматизированная система для исправления и обновления всех серверов и регулярно обновлять свои AMI и поверните ваши серверы, чтобы предотвратить долгоживущие APT.
[] Выключение неиспользованных услуг и серверов. Самый безопасный сервер — это тот, который работает. Расписание Dev Servers быть приводится в движение в нерабочее время, когда не требуется.
[] Используйте Система обнаружения вторжений Чтобы минимизировать Apts Анкет
Отказ в защите обслуживания
[] Убедитесь, что атаки DOS на ваши API не будут нанести вред вашему сайту. Как минимум, имейте ограничители скорости на ваших более медленных API -пути и API, связанных с аутентификацией, такие как подпрограммы генерации входа и генерации токенов. Рассмотрим CAPTCHA на API в интерфейсе, чтобы защитить внутренние услуги от DOS.
[] Обеспечивание пределов здравомыслия по размеру и структуре предоставленных пользователя данных и запросов.
[] Выполнить Тестирование хаоса Чтобы определить, как ведет себя обслуживание под стрессом.
[] Подумайте о использовании Распределенное отказ в обслуживании (DDOS) Смягчение с помощью глобальной прокси -сервисной службы кэширования, такого как Cloudflare Анкет Это можно включить, если вы страдаете от атаки DDOS и в противном случае функционируют как ваш поиск DNS.
Взломать себя
[] Проверяйте ваш дизайн и реализацию.
[] Протекайте проникновение — взломайте себя, но также имейте кого -то, кроме вас, также проведено тестирование ручки.
[] Упорно проверяйте ваше приложение до нормального использования. Рассмотрим OWASP Test Chectlist Чтобы направить ваш тестовый взлом.
Ответ инцидента
[] Сотрудники поезда (особенно старшие сотрудники) относительно опасностей и методов, используемых в социальной инженерии.
[] У вас есть модель угроз, которая описывает, от чего вы защищаете. Он должен перечислить и расставить приоритеты возможных угроз и актеров.
[] Настройка стандартной учетной записи электронной почты и веб -страницы, посвященной пользователям для сообщений о проблемах безопасности ( secure@example.com и/безопасность).
[] Имейте практический план инцидентов безопасности. Однажды вам это понадобится.
Безопасность — это путешествие
Прежде всего, помните, что безопасность-это путешествие и не может быть «запеченной» продукта непосредственно перед доставкой. Я надеюсь, что этот контрольный список побудит вас через весь жизненный цикл разработки, чтобы повысить безопасность ваших услуг.
Версия 1 этого контрольного списка можно найти в Контрольный список безопасности веб -разработчика v1
Узнайте больше о Sensedeep
Чтобы узнать больше о Sensedeep Server Server Monitoring Solution Goto https://www.sensedeeep.com
Оригинал: «https://dev.to/sensedeep/web-developer-security-checklist-v2-3p9b»