Модуль 5 · Урок 15 · ~10 минут

Безопасность: минимум, дающий 80%

Одна идея этого урока: большинство взломов – не гении, а незакрытые типовые дыры; короткий чек-лист закрывает основное.

Знакомая ситуация

Ты за вечер собрал с агентом мини-сервис для школы: студент вводит номер заказа – видит свои материалы. Всё работает, все довольны. Через месяц выясняется: подставив чужой номер в адресную строку, любой человек открывал чужие материалы. Никто ничего не «взламывал» – просто дверь не была заперта.

Взломы из кино – про гениев. Взломы из жизни – про автоматические сканеры, которые круглосуточно перебирают типовые дыры во всех сайтах подряд. Твоя задача – не победить гения, а не попасть в улов сканера.

Безопасность – не магия, а короткий список типовых дыр. OWASP Top 10 – мировой рейтинг этих дыр, он почти не меняется годами. Пять правил из него закрывают основную массу реальных атак на приложения твоего масштаба.

Пять правил, дающих 80%

1
Не доверяй никакому вводу извне injectionВсё, что пришло от пользователя – текст в форме, параметр в адресе, сообщение боту – может быть попыткой внедрить команду. Правило: внешний ввод всегда проверяется и никогда не подставляется в запросы «как есть».
2
Секреты – только в переменных окружения secrets managementКлючи API, пароли, токены – не в коде, не в чате с агентом, не в репозитории. Ключ в коде рано или поздно утекает, а утёкший ключ платёжки или LLM – это чужие траты на твоём балансе.
3
«Кто ты» и «что тебе можно» – разные проверки authentication vs authorizationАутентификация подтверждает личность, авторизация – право на действие. Классическая дыра: вход проверяем, а право – нет, и любой залогиненный студент открывает чужие данные, поменяв номер в адресе. Проверка права – на КАЖДОМ действии.
4
Минимальные права least privilegeКаждому ключу и сервису – ровно столько прав, сколько нужно для его работы. Боту рассылки не нужен доступ к платежам. Тогда утечка одного ключа – неприятность, а не катастрофа: это тот же blast radius из урока 13.
5
Обновляй зависимости vulnerable dependenciesТвоё приложение стоит на чужих библиотеках, в них регулярно находят дыры – и сканеры атакуют именно известные дыры старых версий. Раз в месяц: попроси агента проверить и обновить зависимости.

Особенность ИИ-разработки

Агент по умолчанию оптимизирует одно: «работает». Безопасность в это «работает» не входит – код может быть рабочим и дырявым одновременно, снаружи разницы не видно.

Поэтому безопасность – отдельный проход, отдельным запросом: «проверь это как security-ревьюер по OWASP Top 10». Тот же агент в роли ревьюера находит дыры, которые сам же оставил в роли строителя – потому что теперь он ищет именно их.

Как думают три уровня

Джун · «есть же пароль»Безопасность = форма входа. Раз пользователи логинятся – всё защищено. Про то, что залогиненный пользователь может лазить по чужим данным, не думает вовсе.
Мидл · латает то, о чём слышалЗнает про инъекции и прячет ключи – потому что где-то читал. Но защита точечная: что в чек-листе не встречалось, то не закрыто. Нет системы – есть набор выученных заплаток.
Сеньор · чек-лист угроз с этапа дизайнаЕщё в постановке задачи спрашивает: «что здесь может пойти не так по OWASP?». Права – минимальные, секреты – в окружении, и перед запуском – отдельное security-ревью как обязательный шаг, а не как жест паранойи.

Проверь себя

1. В личном кабинете школы студент открывает свои оплаты по адресу с номером профиля. Поменяв номер на чужой, он видит чужие оплаты. Вход при этом работает исправно. Что сломано?

2. Агент сделал телеграм-бота и для простоты вписал ключ LLM-провайдера прямо в код. Код лежит в репозитории. Реакция сеньора?

3. Агент закончил мини-сервис приёма домашних заданий и отчитался: «всё работает, проверил». Что добавит сеньор перед запуском?

Что говорить агенту уже сегодня

Источники