Берегите очко смолоду
Часть 9, финал — про то, что иногда лучший фикс — это удаление, и как вообще жить с теми, кто приходит с находками.
Что это значит для нормального проекта#
Безопасность не обязана превращаться в бесконечный список запретов. Часто лучший ход — убрать лишнюю поверхность: закрыть ненужную админку, выключить старый endpoint, удалить роль, которой никто не пользуется, забрать публичный доступ у служебной панели.
Чем меньше у сервиса ненужных дверей, тем проще его поддерживать. Это снижает риск для разработчиков и одновременно делает продукт понятнее для владельца.
Что это значит для нормального проекта#
Безопасность не обязана превращаться в бесконечный список запретов. Часто лучший ход — убрать лишнюю поверхность: закрыть ненужную админку, выключить старый endpoint, удалить роль, которой никто не пользуется, забрать публичный доступ у служебной панели.
Чем меньше у сервиса ненужных дверей, тем проще его поддерживать. Это снижает риск для разработчиков и одновременно делает продукт понятнее для владельца.
На одном из проектов мне всё-таки сломали базу. Не «нашли потенциальную дырку» — реально зашли. И первое, что хочется сделать в такой момент, — латать: закрыть конкретную щель, сменить пароль, накатить заплатку и выдохнуть.
Я сделал иначе. Сел и посмотрел на проект целиком: зачем здесь вообще отдельная админка, зачем бэкенд, зачем база, которая круглые сутки висит в сети и ждёт, пока её опять поковыряют. Оказалось — почти незачем. Контент менялся редко, логики было немного.
И вместо заплатки я снёс. Отдельную админку, бэкенд, саму БД. Проект переехал на статику с файловой CMS: контент стал обычными файлами в git, без базы и без публичной панели, которая 24/7 торчит наружу. Это был большой коммит «на удаление» — сотни файлов, десятки тысяч удалённых строк. Один из самых приятных коммитов в моей жизни, если честно.
Мысль за этим простая. Самый защищённый компонент — тот, которого нет. У несуществующей базы нельзя угнать дамп. У несуществующей админки нельзя подобрать пароль. Иногда правильный «фикс» — это не патч, а удаление.
YAGNI как модель безопасности#
Обычно YAGNI — «you aren't gonna need it» — подают как совет про чистоту кода: не пиши лишнего, не закладывайся на будущее, которое не наступит. Но у него есть второе дно, чисто про безопасность.
Каждый сервис, который вы подняли «на всякий случай», — это ещё одна постоянно открытая дверь. Лишняя база, лишний API, забытый staging, админка «чтобы удобнее было править» — всё это не просто код, это поверхность, которую кто-то будет щупать, пока вы спите. Чем меньше дверей, тем меньше можно открыть.
А «да кому я нужен» — это не модель угроз. Это анестезия. Боты не выбирают вас по значимости, они идут по спискам адресов. Меньше открытых дверей — меньше того, что найдут по списку.
Как работать с теми, кто приходит с находками#
За время этой истории ко мне приходили очень разные люди, и их стоит научиться различать спокойно, без паники.
Есть добросовестные багхантеры. Человек нашёл проблему, описал шаги, прислал отчёт, иногда подсказал, как чинить. Это нормально и полезно. Таким людям надо говорить спасибо — они делают вашу работу бесплатно и по-человечески.
А есть вымогатели. Приходит письмо, плотно набитое страшными словами: IDOR, мисконфиг, «у меня netcat и hap, я внутри», «полный доступ». Иногда за этим стоит реальная мелочь, иногда — вообще ничего, просто лексикон, рассчитанный на испуг. Бывает и хуже: платишь человеку серьёзные деньги за «помощь» или «молчание», а получаешь кидок и новое требование заплатить ещё.
Отсюда несколько уроков, которые дались мне дорого.
Страшное письмо — это не модель угроз. Набор баззвордов не равен взлому. Реагировать надо из понимания своей системы, а не из словаря того, кто вам пишет: открываете архитектуру, смотрите, возможно ли описанное у вас в принципе, и только потом делаете выводы.
Не платите за «доказательства» без чёткого скоупа и договора. «Дай денег, и я покажу» — это не аудит, это рычаг. Нормальная работа начинается с понятных рамок: что смотрим, что считается находкой, что за это будет.
И паника лечит не тот слой. Первое движение «сейчас сменю пароль» успокаивает нервы, но часто не закрывает реальную дыру, если проблема была в логике доступа, а не в украденном пароле.
Здоровый процесс вместо дёрганья#
Чтобы не жить от письма к письму, помогает скучный повторяемый цикл: audit → plan → fix → recheck. Сначала смотрим, что есть. Потом решаем, что и в каком порядке чиним. Потом чиним. Потом перепроверяем, что починили именно это и не сломали соседнее.
Отдельная важная часть — ловля ложных срабатываний. Изрядная доля «находок», что из автоматических сканеров, что из писем, оказывается не уязвимостями. Гнать фиксы ради галочки в таком же красном отчёте — это тоже вред: вы тратите силы и риск-бюджет не туда. Иногда правильный ответ — «это не баг, и вот почему».
И принятые риски стоит документировать. Прямо честно записать, например в README: вот это мы сознательно оставили так, по такой причине, это осознанное решение, а не недосмотр. Это спасает будущего вас от паники по поводу того, что вы сами когда-то решили.
Что из всего этого осталось#
Если вытряхнуть всю серию в несколько живых мыслей, а не в оглавление, получится примерно так.
Не верьте вводу — ни телу запроса, ни заголовку, ни вебхуку «от провайдера»; всё, что пришло снаружи, проверяйте у первоисточника. Падайте закрыто — пустой конфиг и непонятная ситуация должны означать «нельзя», а не «можно». Минимизируйте поверхность — каждый сервис, которого нет, не взломают. Берегите секреты — они утекают не там, где вы их прячете, а во фронтенде, в слоях образа и в общих ключах. И помните, что деньги — это про идемпотентность и подлинность, а не про красоту.
Ничего из этого не про паранойю и не про дорогие аудиты. Это несколько привычек, которые дешевле выработать заранее, чем оплачивать письмо со страшными словами потом.
Я всё это прошёл на своих проектах — и базу мне ломали, и письма с баззвордами приходили, и заплатки я ставил не туда, прежде чем научился просто удалять лишнее. За это время набил руку на аудитах и хардненинге небольших сервисов. Если вам нужен спокойный трезвый взгляд на безопасность вашего проекта, без нагнетания и продажи страха, — можно обращаться, посмотрим вместе.
Готовы к честному аудиту безопасности без паники и продажи страха? Напишите в Telegram или на почту — проведём спокойный разбор вашего проекта и составим план реальных улучшений.



