Руководство по безопасности NocoBase
NocoBase уделяет особое внимание безопасности данных и приложений — от функционального дизайна до системной реализации. Платформа содержит встроенные функции безопасности, такие как аутентификация пользователей, контроль доступа и шифрование данных, а также позволяет гибко настраивать политики безопасности в соответствии с реальными потребностями. Будь то защита пользовательских данных, управление правами доступа или изоляция сред разработки и продакшна, NocoBase предоставляет практические инструменты и решения. Цель этого руководства — дать рекомендации по безопасному использованию NocoBase, помогая защищать безопасность данных, приложений и окружения и обеспечивать эффективное использование функций системы при соблюдении требований безопасности пользователей.
Аутентификация пользователей
Аутентификация пользователей используется для идентификации пользователей, предотвращения несанкционированного входа в систему и защиты учетных записей от неправомерного использования.
Ключ токена (Token Key)
По умолчанию NocoBase использует JWT (веб-токен в формате JSON) для аутентификации вызовов API на стороне сервера. Пользователи могут задать ключ токена через переменную окружения APP_KEY. Управляйте ключом токена приложения должным образом, чтобы избежать утечки. Обратите внимание: если APP_KEY изменится, старые токены также станут недействительными.
Политика токенов
NocoBase поддерживает настройку следующих политик безопасности пользовательских токенов:
Проверка загрузок в NocoBase не доверяет Content-Type, отправленному в запросе. Она предпочитает MIME type, определенный на стороне сервера. Расширение файла описывает только имя файла и не должно считаться авторитетным типом содержимого. Поэтому при раздаче public-загрузок также необходимо убедиться, что путь доступа к файлам задает корректные защитные HTTP-заголовки.
Если вы развертываете NocoBase через Docker или используете nginx-конфигурацию, сгенерированную NocoBase, каталог загрузок уже содержит эту защиту: все загруженные файлы возвращают X-Content-Type-Options: nosniff, а файлы с активным содержимым, такие как html, xhtml, svg, svgz и pdf, отдаются как скачиваемые файлы через Content-Disposition: attachment.
Если вы используете собственный proxy, CDN, объектное хранилище или напрямую публикуете локальный каталог загрузок, убедитесь, что эти правила нельзя обойти. В качестве ориентира можно использовать следующую конфигурацию nginx:
Если ваше приложение NocoBase использует APP_PUBLIC_PATH, замените /storage/uploads/ фактическим префиксом доступа, например /nocobase/storage/uploads/.
Обычно мы рекомендуем администраторам:
- Устанавливать более короткий срок действия токена, чтобы ограничить время его использования при возможной компрометации.
- Устанавливать разумный срок действия сессии — он должен быть больше срока действия токена, но не слишком большим — чтобы балансировать пользовательский опыт и безопасность. И спользуйте механизм автоматического обновления токена, чтобы активные сессии пользователей не прерывались, одновременно снижая риск злоупотребления долгоживущими сессиями.
- Устанавливать разумный лимит обновления истекшего токена, чтобы при длительной неактивности пользователя токен естественным образом истекал без выпуска нового токена, снижая риск злоупотребления «спящими» пользовательскими сессиями.
Хранение токена на клиенте
По умолчанию пользовательские токены хранятся в постоянном локальном хранилище браузера. После закрытия вкладки браузера и повторного открытия, если токен всё ещё действителен, пользователю не нужно входить снова.
Если вы хотите, чтобы пользователи входили заново каждый раз при открытии страницы, вы можете задать переменную окружения API_CLIENT_STORAGE_TYPE=sessionStorage, чтобы сохранять пользовательский токен в сессионном хранилище браузера. Это позволит требовать повторного входа при каждом открытии страницы.

