Рубрики
Uncategorized

Контрольный список безопасности веб -разработчика v2

Простой контрольный список для защиты веб -приложений в облаке с акцентом на AWS. Tagged Security, AWS, WebDev, DevOps.

Разработка безопасных, надежных веб -приложений в облаке — это жесткий , очень сложно. Если вы думаете, что это легко, вы либо более высокая форма жизни, либо у вас есть болезненное пробуждение впереди вас.

Если вы выпили 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»