• безопасность
  • идентификация
  • проверочный список
  • аутентификация

Основная проверочная список безопасности для учетной записи пользователя

Создание учетной записи пользователя является критически важным компонентом любого приложения. Проверка имен пользователей и паролей может показаться самым простым подходом, но есть много других аспектов, которые стоит учесть.

Gao
Gao
Founder

Введение

Создание учетной записи пользователя является критически важным компонентом любого приложения. Это позволяет вам предоставлять персонализированные сервисы, повышать качество данных и улучшать удержание пользователей.

Проверка имени пользователя и пароля может показаться самым простым подходом, но есть много других аспектов, которые стоит учесть. Давайте начнем!

Инфраструктура

Обеспечивайте использование HTTPS

Давайте начнем с основ. Всегда обеспечивайте использование HTTPS (Hypertext Transfer Protocol Secure) для шифрования передачи данных через интернет. HTTPS гарантирует конфиденциальность и неприкосновенность данных, обменивающихся между устройством пользователя и вашим сервером.

Настройка HTTPS может показаться сложной, но существует много инструментов и сервисов, которые могут помочь вам:

  • Если вы самостоятельно организуете хостинг, Let's Encrypt предоставляет бесплатные сертификаты SSL/TLS, которые можно использовать для включения HTTPS на вашем сайте.
  • Если вы используете облачного провайдера, например AWS, Azure или Google Cloud, вы можете использовать их управляемые услуги для настройки HTTPS.

Не разрешайте публичный доступ к базе данных, ограничьте доступ до доверенных источников

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

Всегда помните о том, чтобы никогда не разрешать публичный доступ к вашей базе данных. Поместите вашу базу данных в частную сеть и разрешите доступ только из доверенных источников.

Безопасное управление приватными токенами

Приватные токены, такие как токены доступа или API ключи, часто используются для програмного аутентификации и авторизации. Для безопасного управления этими токенами:

  • Используйте токены с коротким сроком действия и токены для обновления, чтобы минимизировать риск несанкционированного доступа.
  • Используйте безопасный механизм хранения токенов, например, хранилище ключей, чтобы защитить токены от несанкционированного доступа.
  • Регулярно обновляйте токены, чтобы предотвратить их компрометацию. Некоторые протоколы, например, OAuth 2.0, предоставляют механизм для обновления токенов.
  • Сохраняйте контроль над отменой токенов в случае нарушения безопасности.

Мудро выбирайте алгоритм хеширования паролей

Если у вас есть опыт работы с хешированием паролей, вы можете знать, что существует много доступных алгоритмов, некоторые из которых уже не считаются безопасными, такими как MD5, SHA-1 и SHA-2.

Некоторые распространенные причины их небезопасности:

  • Они не были специально разработаны для хеширования паролей, и их вычислительная скорость слишком велика, что облегчает атаки грубой силой.
  • Они не используют соль, что облегчает создание для них радужных таблиц.
  • Они подвержены атакам коллизий, позволяющим атакующим генерировать разные пароли с одним и тем же значением хеша.

Стандартные алгоритмы хеширования паролей, такие как bcrypt и Argon2, были разработаны для решения этих проблем. Из-за ограниченного объема этой статьи мы не будем подробно останавливаться на них. См. Эволюция хеширования паролей чтобы узнать больше.

Изучайте и строго придерживайтесь открытых стандартов

Открытые стандарты, такие как OAuth 2.0 и OpenID Connect (OIDC), предоставляют безопасные и стандартизированные подходы к аутентификации и авторизации пользователей. Они были проверены на практике и получили широкое распространение в индустрии.

Однако их неправильная реализация может привести к уязвимостям безопасности, даже для больших команд с опытными разработчиками. Недавний пример - уязвимость OAuth, обнаруженная в Expo, популярном фреймворке для создания мобильных приложений. Он служит хорошим примером того, как маленькая ошибка может привести к нарушению безопасности.

Шифруйте данные в состоянии покоя

Данные в состоянии покоя, такие как хранимая информация о пользователе или резервные копии баз данных, должны быть зашифрованы с использованием сильного алгоритма шифрования. Это гарантирует, что даже если данные будут скомпрометированы, их нельзя будет прочитать без ключа для дешифрования. Дважды проверьте, поддерживает ли ваш облачный провайдер эту функцию, так как она часто требуется для соблюдения требований комплайнса.

Настраивайте файрволы

DDoS (распределенные отказы в обслуживании), хотя и устарели, остаются значительной угрозой. Согласно отчету о угрозах DDoS от Cloudflare за 4 квартал 2022 года, объем трафика HTTP DDoS-атак увеличился на 79% год к году. Вместо создания собственного решения, рационально настроить управляемые файрволы и использовать уведомления, чтобы снизить этот риск.

Приложения и клиенты

Повысьте уровень безопасности для общедоступных клиентов

Общедоступные клиенты, такие как мобильные приложения или одностраничные приложения, более подвержены уязвимостям безопасности. Даже если вы их предоставляете, вы должны рассматривать их как недоверенные источники в вашей модели безопасности. Например:

Никогда не доверяйте открытым данным на вход

Ввод пользователя может быть значительным источником уязвимостей безопасности, которые часто упускают из виду. Некоторые общие виды упущенных уязвимостей - это Cross-Site Scripting (XSS) и SQL Injection. Обязательно проверяйте и очищайте все данные на входе пользователя перед использованием.

Следите за действиями

Поддержание аудита действий пользователя помогает в обнаружении и расследовании инцидентов безопасности. Записывайте и контролируйте действия пользователей, такие как попытки входа в систему, изменение пароля или чувствительные операции. Анализ этих логов может дать ценные представления о потенциальных нарушениях безопасности или подозрительных действиях.

Реализуйте надежную аутентификацию

Реализуйте надежный механизм аутентификации для проверки идентичности пользователей. Как упоминалось ранее, рассмотрите возможность использования безопасных протоколов, таких как OAuth 2.0 или OpenID Connect, для аутентификации. Для получения дополнительной информации вы можете обратиться к CIAM 101: Authentication, Identity, SSO.

Постройте надежную авторизацию (например, реализуйте управление доступом на основе ролей)

В дополнение к аутентификации, должны быть реализованы надлежащие механизмы авторизации. Реализуйте управление доступом на основе ролей (RBAC), чтобы гарантировать, что пользователи имеют доступ только к тем ресурсам и действиям, которые им разрешены выполнять. Для получения дополнительной информации вы можете обратиться к CIAM 102: Authorization & Role-based Access Control.

Реализуйте многофакторную аутентификацию (MFA)

Многофакторная аутентификация (MFA) добавляет дополнительный уровень безопасности, требуя от пользователей предоставление одного или нескольких форм идентификации, таких как пароль и одноразовый код, отправленный на их мобильное устройство. Еще один хороший пример MFA - это когда GitHub просит пользователей ввести одноразовый код из их мобильного приложения, который отображается на веб-странице, для выполнения чувствительных операций, таких как удаление репозитория.

Однако наличие MFA не является необходимостью для большинства начинающих стартапов, особенно если у вас нет готового решения "из коробки". Оно может быть избыточным и негативно влиять на ваш пользовательский опыт.

Культура

Советы, представленные выше, в основном охватывают "пассивные" меры безопасности, которые известны до возникновения инцидента безопасности. Однако существуют также "активные" меры безопасности, которые вы можете принять, чтобы улучшить вашу общую позицию по безопасности, которые будут более эффективными в долгосрочной перспективе.

Обучайте вашу команду и пользователей фишингу и социальной инженерии

Фишинг и социальная инженерия критичны, потому что они могут обесценить многие из упоминавшихся выше мер безопасности. Например, если пользователь обманом заставлен отдать свой пароль или щелкнуть по кажущейся безобидной картинке кота, содержащей вредоносное ПО, сила вашего алгоритма хеширования пароля или правила файрвола становятся несущественными.

Большинство людей считают обучение безопасности скучным, и часто это действительно так. Поэтому измените способ, которым вы обучаете свою команду и пользователей. Например, вы можете сымитировать фишинговый email до того, как это сделает реальный злоумышленник и продемонстрировать, как его идентифицировать. Вы даже можете предложить награды за сообщение об email команде безопасности.

Настраивайте DevSecOps

В дополнение к ручным проверкам безопасности вы также можете реализовать практики DevSecOps для автоматизации проверок безопасности. Например, вы можете настроить CI/CD конвейер для запуска статических инструментов анализа кода, таких как CodeQL, и автоматически запускать тесты на проникновение с помощью инструментов, таких как OWASP ZAP.

Поддерживайте наиболее строгую конфигурацию без воздействия на пользовательский опыт

В вопросах безопасности всегда выбирайте наиболее безопасную конфигурацию, которая не отрицательно влияет на пользовательский опыт. Избегайте поиска обходных путей или снижения уровня безопасности ради удобства. Безопасность всегда должна иметь приоритет.

Как стартап или независимый разработчик, вы можете чувствовать, что вам не хватает необходимых ресурсов для внедрения этих мер. Тем не менее, есть профессиональные услуги безопасности, которые предлагают бесплатные или дружелюбные к стартапам варианты. Потратьте время на рассмотрение и рассмотрите возможность их использования.

Заключение

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