Урок 7 из 8 · 20 мин · обновлено
Безопасность и проверка: что нельзя доверять нейросети
Почему ключи и пароли нельзя класть в код страницы, когда приложение начинает работать с персональными данными, какую типичную уязвимость оставляет нейросеть и как проверить код перед тем, как показать его людям.
Код страницы видят все
У приложения из одного HTML-файла нет секретов. Откройте любую страницу в браузере и нажмите Ctrl + U — увидите её код целиком. То же может сделать любой посетитель вашего трекера.
Отсюда главное правило: в коде страницы нельзя хранить ничего секретного. Ни паролей, ни ключей доступа к сервисам.
Типичная ситуация: вы просите добавить в трекер погоду или перевод, нейросеть подключает внешний сервис и вставляет в код ваш личный ключ доступа. Работает. Но ключ теперь виден всем — и кто угодно может пользоваться сервисом за ваш счёт или исчерпать ваш лимит.
Если для функции нужен секретный ключ, значит, нужен сервер, который хранит ключ и сам обращается к сервису. Это уже не проект из одного файла: такую часть лучше поручить программисту.
Чужие данные — чужая ответственность
Пока трекер хранит только ваши привычки в вашем браузере, вы ни за что не отвечаете. Всё меняется, когда приложение начинает собирать данные других людей: имена, телефоны, почты, ответы анкет.
Это персональные данные, и их сбор в России регулирует закон 152-ФЗ. Нужны согласие человека, политика обработки данных и меры защиты. А хранить такие данные в браузере посетителя бессмысленно — их нужно отправлять на сервер, и это снова выход за рамки проекта новичка.
Поэтому простое правило для вайбкодинга: не собирайте чужие данные, пока рядом нет того, кто отвечает за их защиту.
Типичная уязвимость: текст, который становится кодом
Нейросети часто выводят текст на страницу так:
row.innerHTML = '<span>' + habit.name + '</span>';
Выглядит невинно и работает. Но innerHTML разбирает текст как разметку. Если ввести вместо названия привычки кусок кода, браузер его выполнит. В личном трекере вы атакуете сами себя, но стоит данным оказаться у других людей — в общем списке, отзывах, гостевой книге — и чужой код выполнится уже у них. Эта уязвимость называется межсайтовым скриптингом (XSS) и входит в число самых распространённых.
Безопасный вариант выводит текст как текст:
const name = document.createElement('span');
name.textContent = habit.name;
textContent никогда не превращает текст в код. Проверить свой трекер просто: добавьте привычку с названием <b>Бег</b>. Если на карточке видны угловые скобки — всё в порядке. Если «Бег» стал жирным — вывод идёт через innerHTML, и это стоит исправить.
Подключения со стороны
Иногда нейросеть добавляет строку вроде <script src="https://…"> — загрузку чужой библиотеки из интернета. Такой код выполняется на вашей странице с теми же правами, что и ваш. Для небольших проектов просите обходиться без внешних библиотек — мы так и сделали в ограничениях задания. Если без библиотеки никак, узнайте, что это за источник, и не берите случайные адреса.
Чек-лист перед публикацией
Перед тем как показать проект другим, пройдите пять вопросов:
- Секреты. В коде нет паролей, ключей и токенов.
- Данные. Приложение не собирает чужие персональные данные — или вы знаете, как их защитить по закону.
- Вывод текста. Всё, что вводит пользователь, выводится как текст: проверено вводом
<b>Бег</b>. - Подключения. Нет загрузок кода со случайных адресов.
- Сценарии. Таблица проверок из урока 6 пройдена полностью.
Нейросеть может помочь и здесь: «Проверь этот код по пунктам: секреты в коде, сбор персональных данных, вывод пользовательского текста через innerHTML, подключение внешних скриптов. Для каждого пункта — есть ли проблема и где». Но её ответ — подсказка, а не гарантия: пропустить проблему она может так же, как пропустила её, когда писала код.
Попробуйте сами. Пройдите чек-лист для своего трекера. Обязательно проверьте вывод текста: добавьте привычку <b>Бег</b>. Затем попросите нейросеть проверить код по тем же пунктам и сравните её выводы со своими.
Что должно получиться
Для трекера из урока 6:
- Секреты — нет: трекер ни к каким сервисам не обращается.
- Данные — только ваши, в вашем браузере.
- Вывод текста — на карточке видно
<b>Бег</b>с угловыми скобками: название выводится черезtextContent. - Подключения — нет: всё в одном файле.
- Сценарии — пройдены в прошлом уроке.
Если на шаге 3 «Бег» стал жирным, напишите: «Название привычки выводится через innerHTML. Замени на textContent, чтобы пользовательский текст не мог стать кодом. Остальное не меняй». Удалите тестовую привычку — например, очистив хранилище, как в уроке 5.
Мини-тест: проверьте себя
Закрепите урок: несколько вопросов, разбор ответов — в конце.
-
Нейросеть подключила к трекеру сервис погоды и вставила в код ваш секретный ключ. Чем это опасно?
Код страницы целиком доступен любому: достаточно открыть исходный код. Секретный ключ в нём — то же, что пароль на открытке.
-
Чем опасен вывод названия привычки через innerHTML?
innerHTML разбирает текст как разметку. textContent выводит его как есть, и подсунутый код остаётся просто текстом.
-
Вы хотите добавить на сайт форму «Оставьте телефон, мы перезвоним». Что меняется?
Телефон другого человека — персональные данные. Их сбор регулирует закон, а сохранять их нужно на сервере, что выводит проект за рамки вайбкодинга новичка.
-
Нейросеть проверила код и написала, что уязвимостей нет. Достаточно ли этого?
Нейросеть может пропустить проблему так же, как пропустила её, когда писала код. Её разбор полезен, но решение — ваше.