Сейчас в интернеты начинает уезжать огромное количество кода, который написали не разработчики в классическом смысле, а вайб-коддеры вместе с ИИ.
И в этом нет ничего плохого ровно до того момента, пока такой код не оказывается на сервере без минимальной проверки безопасности.
Потому что по умолчанию ИИ пишет код не безопасно. Это не потому что он не умеет писать безопасный код, а потому что его задача обычно другая: чтобы приложение завелось, чтобы функция работала, чтобы форма отправлялась, чтобы API отвечал. А про безопасность, если ее отдельно не потребовать, он очень часто забывает.
В итоге люди деплоят приложение, радуются, что "все заработало", а потом удивляются, почему сервер майнит кому-то крипту, шлет спам, данные ваших пользователей утекли в сеть или внезапно ложится от самой примитивной нагрузки.
С ростом популярности вайб-коддинга растет и популярность вайб-хакинга. Если вы пишете код с помощью ИИ но забываете про безопасность, то кто-то другой с помощью ИИ найдет дырку и воспользуется ей.
Поэтому в этой статье я собрал самые базовые вещи, которые нужно знать и делать, если вы пишете что-то с помощью ИИ и собираетесь выкатывать это в интернет. База не закроет вопрос безопасности полностью, но закроет 90% типовых проблем. Поехали?
Первое. Безопасность надо требовать прямо в промпте. Если вы не сказали агенту думать про безопасную разработку, он почти наверняка про нее и не подумает. Самый простой вариант - прямо просить писать код с учетом базовых практик и ориентиром на OWASP Top 10. OWASP Top 10 - это список самых распространенных уязвимостей, который обновляется раз в несколько лет. Ссылка на официальный сайт: https://owasp.org/www-project-top-ten/
Второе. Если используете Docker, не запускайте контейнеры от root. Это одна из самых дурацких дыр, потому что ее обычно оставляют из-за удобства. Но в кибербезопасности есть обратная зависимость: чем удобнее тебе, тем проще хакеру тебя взломать.
Третье. Не надо светить наружу все подряд. Очень часто у людей наружу торчат `3000`, `8080`, какие-нибудь тестовые панели, debug-роуты, мониторинги, админки и прочие подарки для сканеров. В нормальном сценарии снаружи должны торчать максимум 80 и 443 порты, а все лишнее должно быть закрыто.
Четвертое. `.env` не должен жить в репозитории. Вообще. Если там лежат токены, пароли, ключи и доступы, а потом это уехало в git, то считайте что они уже утекли.
Пятое. Обновляйте зависимости. ИИ очень любит подтягивать какие-нибудь не самые свежие пакеты, а иногда и откровенный хлам с уже известными уязвимостями. `npm audit`, `pip audit`, `go vuln` и подобные проверки стоит запускать хотя бы перед деплоем.
Шестое. Если у вас есть API без rate limiting, то это не API, а открытое приглашение устроить вам веселую ночь. Сервер лежит, ничего не работает, вы пытаетесь понять, что произошло, а это просто кто-то решил проверить, как ваше API держит нагрузку.
Седьмое. Нужны логи. Без них после взлома или странной активности вы будете сидеть и гадать, что вообще произошло. Хотя бы запросы, ошибки авторизации и подозрительные действия должны куда-то писаться. Просите ИИ-агента не забывать про логирование в коде.
Восьмое. Бэкапы должны быть и они должны лежать отдельно. Если сервер скомпрометировали, а бэкап лежит рядом с ним, то считайте что бэкапа нет.
Девятое. Если у вас есть загрузка файлов пользователями, не относитесь к ней как к мелочи. Любой хакер сперва попробует загрузить шелл или вирус. Проверяйте размер файла, тип, место хранения и права доступа.
Десятое. Если у вас открыт SSH на рабочем сервере, то отключайте вход по паролю и оставляйте только по ключу. Вход по паролю - это просто подарок для любого сканера.
Если совсем коротко, то главный принцип тут очень простой. Если ИИ что-то сгенерировал, и оно сразу заработало, это не повод радоваться и сразу тащить в прод. Следующий шаг - это попросить ИИ-агента проверить код на безопасность и найти возможные уязвимости.
В новой реальности код писать сдействительно стало сильно легче. Но вот отвечать за последствия этого кода по-прежнему вам.
Забавно еще то, что я это уже всё наблюдал: на заре рунета, в начале 2000-х, всё происходило точно так же, только тогда люди писали небезопасный код сами, а информации о том как взламывать и защищаться было очень мало. Сейчас же информации о том как взламывать и защищаться стало очень много, и людям нужно учиться проверять за ИИ.
Всем безопасного кодинга!