Берегите очко смолоду
Часть 0 — вступление, с чего всё началось и о чём будет дальше.
Для кого эта серия#
Серия написана не для паранойи и не для красивых отчётов про «кибербезопасность». Она для владельцев и команд, у которых уже есть сайт, кабинет, платежи, API или админка, открытая наружу.
Идея простая: AI упростил поиск ошибок, значит базовая защита должна стать привычной инженерной работой. Не героизмом после инцидента, а спокойной проверкой до того, как проблему найдёт кто-то другой.
Для кого эта серия#
Серия написана не для паранойи и не для красивых отчётов про «кибербезопасность». Она для владельцев и команд, у которых уже есть сайт, кабинет, платежи, API или админка, открытая наружу.
Идея простая: AI упростил поиск ошибок, значит базовая защита должна стать привычной инженерной работой. Не героизмом после инцидента, а спокойной проверкой до того, как проблему найдёт кто-то другой.
За последний месяц мне написали несколько человек. Тексты разные, а суть одна: «у тебя (или у твоего знакомого) вот тут дырка, я посмотрел». Кто-то прислал аккуратный отчёт с шагами воспроизведения — спасибо таким людям отдельно. А кто-то прислал письмо, от которого холодеет спина: набор страшных слов, скриншот, и между строк — «давай решать вопрос».
Когда-то и я грешил уютной мыслью «да кому я нужен». Маленький сервис, личный сайт, пара ботов — что там ломать. Иллюзию мне выбили быстро, и за последнее время я прошёлся по всем своим проектам и закрыл дыры одну за другой — где-то сам, где-то по следам чужих находок. Так что пишу не из паники новичка, а уже разобравшись, с другой стороны процесса. И первый вывод оттуда простой: «да кому я нужен» — это вообще не модель угроз. Это самоуспокоение.
Что изменилось#
Раньше, чтобы найти у вас уязвимость, человеку нужно было хоть немного уметь: понимать, как устроен HTTP, как собрать запрос руками, чем инъекция отличается от мисконфига. Был порог входа, и он отсекал большинство.
Сейчас порога нет. Можно открыть чат с ассистентом, дать ему адрес сайта и попросить «посмотри, где тут можно зайти». Дальше включается то, в чём ИИ хорош: методично перебрать типовые сценарии. Забытый .env, открытая ручка API, предсказуемый идентификатор в URL, дефолтные креды, заголовок, которому сервер почему-то верит.
И — что важнее — люди не останавливаются на самом приложении. Они идут вширь:
- смотрят публичную поверхность: какие порты открыты, что отвечает, какие технологии торчат наружу;
- копают DNS и обратные записи — по одному IP находят соседние поддомены и забытый
staging, на котором живут половинчатые проверки; - доходят до сервера: SSH, панели, метрики, которые «никто же не знает, где лежат».
Один забытый стенд, на котором отключена нормальная аутентификация, — и дальше уже неважно, насколько аккуратно сделан прод.
Багхантеры бывают очень разные#
Стоит сразу разделить тех, кто приходит с находками.
Первый тип — добросовестные. Нашёл, описал, прислал, иногда даже подсказал, как чинить. С такими людьми приятно работать, и им стоит говорить спасибо, а не отмахиваться — я нескольким добросовестным исследователям даже закидывал донат за потраченное время. Это дешевле и честнее, чем потом разгребать последствия.
Второй тип — вымогатели. И вот тут начинается жанр. Приходит письмо, плотно набитое баззвордами: IDOR, мисконфигурация, утечка PII, «полный доступ к вашей базе». Иногда за этим действительно что-то стоит, иногда — почти ничего, просто красиво названо. Дальше сценарии расходятся: кому-то платят серьёзные деньги за «молчание», а в ответ получают не закрытие вопроса, а новое требование — «это было только начало, теперь плати больше». Платёж тут не покупает безопасность. Он покупает ярлык «готов платить».
Главная мысль вступления простая: вас сканируют не потому, что вы интересны лично. Вас сканируют потому, что вы есть в списке.
Боты не разбирают, блог это, интернет-магазин или чей-то домашний сервер. Они идут по диапазонам адресов и по словарям. «Я слишком маленький, чтобы меня ломать» — это не аргумент, это просто отсутствие логов, в которых видно, что вас уже щупают.
Зачем эта серия#
Я мог бы написать сухой справочник «топ-10 уязвимостей». Их и так хватает. Мне интереснее другое: рассказать честно, на своих и чужих ошибках, как реально утекают данные в небольших проектах — там, где нет отдела безопасности, где всё пишет один-два человека, и где «потом поправлю» живёт годами.
Поэтому дальше будет разговор не про абстрактную теорию, а про конкретные ошибки. Вот о чём:
- Секреты. Где они утекают — и почему чаще всего не там, где вы их прячете. Как ключ уезжает во фронтенд и запекается в бандл, как один и тот же секрет используется для пользователей и админа, как
.envоказывается в слоях Docker-образа. - Доверие к чужому вводу. Почему нельзя верить телу запроса, заголовку, сумме платежа и даже вебхуку «от провайдера». Как подделать «оплата прошла» и как через поле email увести чужой код подтверждения.
- Аутентификация и сессии. Как проверки тихо отключаются, когда конфиг пустой; почему dev-обход по окружению однажды доезжает до прода; что не так с вечными refresh-токенами, которые невозможно отозвать.
Тон будет такой же, как в названии: с иронией, но без клоунады. Я не собираюсь делать вид, что всегда всё делал правильно — наоборот, многие примеры я знаю изнутри, потому что сам на них наступал или разбирал их у других.
Чего здесь не будет#
Не будет инструкций «как взломать соседа». Не будет реальных имён, доменов и проектов — всё обобщено до классов проблем, потому что цель не похвастаться находками, а показать повторяющиеся ошибки. И не будет морали в духе «надо было думать». Думать надо всем нам, и мне в первую очередь.
Если коротко: безопасность маленького проекта — это не про паранойю и не про дорогие аудиты. Это про несколько привычек, которые дешевле выработать заранее, чем оплачивать письмо со страшными словами потом.
Начнём с секретов.
Если у проекта уже есть пользователи, платежи, личные кабинеты или просто открытая наружу админка, безопасность лучше разобрать спокойно и заранее. Напишите мне в Telegram или на почту — посмотрим, где реально есть риск для бизнеса, а где только шум и страшные слова.



