Большинству бэкендов не нужен киберпанк из презентаций. Нужны скучные вещи: не светить секреты, не доверять входу, ограничивать доступ по ролям, понимать, кто к чему ходит, логировать админские действия. Именно на этом горят чаще, чем на экзотических zero-day.
Начните с инвентаря. Где лежат ключи? Кто может читать прод-конфиг? Есть ли админские ручки без аудита? Я видел сервисы с идеальным TLS и паролем от админки в том же репозитории — приоритеты были явно перевёрнуты, хотя сертификаты блестели.
На практике первые победы дешёвые: секреты в менеджере, а не в git; rate limit на логин и чувствительные ручки; подготовка запросов/ORM без склейки строк; проверка прав на объект, а не только «пользователь залогинен». IDOR до сих пор встречается стыдно часто и ловится простым вопросом «а мой ли это ресурс?».
Дешёвые победы
Логи и ошибки тоже дырявят. Стек трейс клиенту, подробный SQL в ответе, токен в query string, файлы загрузок без проверки типа и размера — классика. Отдавайте наружу короткий код, детали оставляйте себе. И отдельно проверьте, куда кладёте загрузки и кто их может прочитать. Проверяю дефолты новых эндпоинтов: не торчит ли debug-ручка и тестовый bypass авторизации. Такие хвосты живут дольше плана. Ищу по репо bypass, TODO auth, temporary — и грустно удивляюсь.
Зависимости обновлять страшно, не обновлять — тоже. Я держу хотя бы поток на критичные CVE и не коплю год апдейтов «на потом». Большой bang-апгрейд опаснее регулярных маленьких и обычно случается в худший момент.
Не надо строить крепость за неделю. Сделайте threat model на салфетке: что ценного, кто злоумышленник, какой самый простой путь к данным. Закройте этот путь. Потом следующий. Безопасность как продукт из десяти эпиков обычно умирает на втором и оставляет ложное чувство прогресса. Бэкапы и доступ к ним — тоже безопасность. Закрытый API бесполезен, если дамп лежит на общем диске без шифрования. Скучный вопрос, который забывают на салфетке threat model.
Маленький threat model
Ревью должно иногда спрашивать про доступ к данным так же буднично, как про нейминг. Если безопасность появляется только на ежегодном аудите, дыры будут находиться инцидентом. Встраивайте простые чеклисты в обычный процесс — без театра.
И главный принцип: безопасность — часть обычной разработки. Скучные дефолты, принцип наименьших привилегий, явные границы доверия. Не романтика red team, а гигиена, без которой остальное рано или поздно бессмысленно.
Отдельно про секреты в CI: токены пайплайна часто шире, чем нужно «для удобства». Раз в квартал пройдитесь по ним так же буднично, как по зависимостям. На практике я видел пайплайн с правом писать в прод «потому что так быстрее настроить». Быстрее — до первого утечного лога. Узкие права и короткий TTL скучны и обычно достаточны для обычного бэкенда без театра безопасности.