Наименьшие привилегии и эшелонированная защита
Несколько проверенных принципов делают систему устойчивой к ошибкам и атакам.
Принцип наименьших привилегий (least privilege) — каждый компонент и пользователь получает ровно те права, которые нужны для работы, и ни одним больше.
Идеальной защиты не бывает: рано или поздно где-то найдётся брешь. Поэтому хорошие системы строят так, чтобы одна ошибка не приводила к катастрофе. За это отвечают несколько принципов.
Наименьшие привилегии
Сервис, который только читает таблицу заказов, не должен иметь прав на её удаление. Пользователь приложения для базы данных не должен быть суперпользователем. Если такой компонент взломают, ущерб ограничен его скромными правами.
-- Плохо: приложение ходит в БД под суперпользователем
-- Хорошо: отдельная роль только с нужными правами
CREATE USER app_reader WITH PASSWORD 'secret';
GRANT SELECT ON orders TO app_reader;
-- INSERT, UPDATE, DELETE НЕ выдаёмЭшелонированная защита
Defense in depth — несколько независимых слоёв защиты. Если злоумышленник пробил один слой, его останавливает следующий. Пример: валидация на фронтенде (удобство) + валидация на бэкенде (настоящая защита) + параметризованные запросы (защита от инъекций) + ограниченные права БД (минимизация ущерба).
Безопасность по умолчанию и безопасный отказ
Secure by default — настройки «из коробки» безопасны: доступ закрыт, пока явно не открыт. Fail securely — при ошибке система переходит в безопасное состояние, а не открывает доступ. Если проверка прав упала с исключением, доступ должен быть запрещён, а не разрешён.
if (proverkaPrav() == OK) razreshit();
else zapretit(); // при любой ошибке — запрет, а не разрешениеКак защищаться
- Выдавайте минимальные права ролям БД, токенам API, контейнерам, сотрудникам.
- Стройте защиту слоями — не полагайтесь на единственную проверку.
- Делайте дефолты закрытыми, а отказы безопасными.
Частые ошибки разработчиков
- Запускают приложение и БД под root/суперпользователем «чтобы не возиться с правами».
- Считают валидацию на фронтенде достаточной — её легко обойти, отправив запрос напрямую.
- В блоке обработки ошибок по умолчанию разрешают действие, открывая доступ при сбое.
Итог
- Least privilege ограничивает ущерб от компрометации.
- Defense in depth — несколько независимых слоёв.
- Secure by default и fail securely защищают от ошибок конфигурации и сбоев.