Вопрос или проблема
Цель
Я хотел бы иметь несколько независимых веб-сайтов с одним общим сервером аутентификации. Сервер аутентификации будет иметь одну базу данных, в которой хранятся все пользователи (только имя пользователя, электронная почта и пароль, так что различные модели данных не важны). Пользователь 1 с веб-сайта A должен иметь возможность войти только на A.com, в то время как пользователь 2 с веб-сайта B должен иметь возможность войти только на B.com.
Вопрос
Будет ли БЕЗОПАСНО хранить URL веб-сайта вместе с записью пользователя, к которому у него должен быть доступ? Например:
{
имя_пользователя: a,
электронная_почта: [email protected]
пароль: ****
веб-сайт: A.com
},
{
имя_пользователя: b,
электронная_почта: [email protected]
пароль: ****
веб-сайт: B.com
}
Почему этот подход
Поправьте меня, если я ошибаюсь, но в противном случае мне придется хостить отдельную базу данных, кэш и сервер для каждого веб-сайта с входом.
Является ли это ‘безопасным’ подходом, во многом зависит от конфигурации самого сервер базы данных, а не от конкретного подхода.
Кроме того, ваш подход может добавить ненужную сложность: должны ли имена пользователей быть уникальными для каждого веб-сайта или для всех веб-сайтов? Может ли пользователь на сайте A также иметь учетную запись на сайте B? Должен ли это быть один или два отдельные учетные записи пользователя?
Наличие одного сервера аутентификации, обслуживающего несколько сайтов, является обычной практикой. Существует много сторонних служб аутентификации и авторизации, которые предлагают именно эту услугу; также есть много других решений с открытым исходным кодом и собственных, которые вы можете рассмотреть. Важное различие заключается в том, что, сосредоточившись только на аутентификации и авторизации, эти продукты разработаны и поддерживаются целой отраслью, посвященной обеспечению правильной защиты данных своих клиентов.
Причина, по которой я это поднимаю, заключается в вашем объяснении, что вы “храните пароль”. Это яркий красный флаг, который вы поднимаете, так как хранение паролей совсем не является безопасной практикой. Новости полны историями о программном обеспечении-вымогателе, кражах учетных данных и захватах учетных записей, многие из которых начинаются с того, что атакующий получает доступ к небезопасно спроектированной базе данных учетных данных.
Так что вместо того, чтобы пытаться создать и защитить целую индивидуальную систему безопасности, рассмотрите некоторые из существующих решений для аутентификации, доступных. Системы, которые предлагают OpenID Connect (для аутентификации) и/или OAuth (для авторизации), обеспечат хорошую безопасность для ваших систем и добавят гибкость. Если вы будете строить на их основе, вы сможете предложить своим клиентам возможность безопасно входить на сайт, используя свои существующие учетные записи Facebook или Google, даже не вводя свои пароли на вашем сайте.
Ответ или решение
Использование одного сервера и базы данных пользователей для нескольких сайтов
Введение
В современном веб-разработке часто возникает необходимость интеграции нескольких независимых сайтов на одной платформе с единым центром аутентификации. Эта статья подробно рассматривает подход к созданию такой системы, выявляя ключевые аспекты безопасности и проектирования.
Цели
Данная система предполагает наличие одного сервера аутентификации, который будет использовать общую базу данных для хранения сведений о пользователях. Наша цель заключается в обеспечении безопасного доступа пользователей к каждому конкретному сайту, ограничивая их возможности входа только на разрешенных ресурсах.
Вопрос безопасности хранения URL
Одним из предложенных решений является хранение URL сайта в записях пользователей:
{
"username": "a",
"email": "[email protected]",
"password": "****",
"website": "A.com"
},
{
"username": "b",
"email": "[email protected]",
"password": "****",
"website": "B.com"
}
Безопасность этого подхода
Хранение информации о сайте в базе данных пользователей может быть безопасным, но требует соблюдения нескольких условий:
-
Защита от SQL-инъекций: Обязательно используйте подготовленные выражения (prepared statements) для работы с запросами к базе данных.
-
Шифрование паролей: Никогда не храните пароли в открытом виде. Вместо этого применяйте такие алгоритмы хеширования, как bcrypt, который защищает пароли даже в случае утечки базы данных.
-
Регулярные аудиты безопасности: Проводите регулярные проверки и обновления системы безопасности для предотвращения возможных уязвимостей.
-
Разграничение доступа: Рассмотрите возможность создания отдельных таблиц пользователей для каждого сайта внутри одной базы данных. Это позволит минимизировать риск компрометации данных.
Альтернативные решения и сложности
Использование одной базы данных для всех сайтов может привести к определенным сложностям. Например:
-
Уникальность имен пользователей: Необходимо решать, должны ли имена пользователей быть уникальными по всему пространству или только в пределах конкретного сайта. Если пользователь сайта A захочет зарегистрироваться на сайте B с тем же именем, это может вызвать конфликты.
-
Научение пользователей: Вам нужно будет руководствоваться тем, чтобы каждый пользователь понимал, на каком именно сайте у него есть учетная запись.
Применение существующих решений
Облачные сервисы аутентификации: Учитывая сложности управления системой аутентификации, рассмотрите использование специализированных решений, таких как OAuth и OpenID Connect. Эти системы уже разработаны с учетом безопасности, и их интеграция с вашими сайтами может значительно упростить процесс управления пользователями.
Преимущества использования готовых решений:
-
Гарантия безопасности: Компании, занимающиеся разработкой аутентификационных систем, предоставляют регулярные обновления, направленные на защиту данных пользователей.
-
Упрощение интеграции: Многие из этих систем предлагают достаточно простые библиотеки и API для интеграции с вашими приложениями.
-
Пользовательский опыт: Возможность входа через социальные сети (например, через Facebook или Google) обеспечит пользователям более высокий уровень удобства.
Заключение
Создание одного сервера аутентификации для нескольких сайтов возможно и будет эффективным, однако необходимо учитывать множество аспектов безопасности. Правильное хранилище паролей, разграничение доступа и использование существующих проверенных решений могут значительно повысить уровень безопасности вашей системы. Тщательное проектирование и диагностирование уязвимостей обеспечит надежный функционал для ваших пользователей, что, в конечном счете, приведет к высокому уровню доверия к вашим веб-ресурсам.