Коротко
Что закрывает приватный репозиторий, а что нет?
Разберём, где именно возникает путаница. Когда непрограммист выкладывает первый проект, он делает два действия подряд.
Первое: создаёт хранилище кода и ставит ему признак «приватное». Второе: подключает это хранилище к хостингу, и тот собирает из кода работающий сайт.
Из двух слов «приватный» и «выложил» в голове складывается ощущение, что проект закрыт с двух сторон. На деле закрыта одна: код.
Аналогия из офиса. Приватный репозиторий - это сейф с чертежами. Опубликованный сайт - это построенное по чертежам здание с открытой дверью. Чертежи никто не украдёт, а войти внутрь может любой, кто знает адрес.
На обучениях я вижу эту ошибку регулярно, и она опаснее всего у тех, кто работает с чужими документами: агентства, юристы, подрядчики. Человек кладёт в проект реальные файлы клиента, потому что уверен, что всё закрыто.
Три уровня закрытости, которые путают между собой
| Что закрываем | Чем закрывается | Что это даёт | Чего не даёт |
|---|---|---|---|
| Исходный код | приватное хранилище кода | никто не прочитает файлы и настройки | страница по-прежнему открыта |
| Черновые и служебные адреса | настройка защиты у хостинга | предпросмотры не индексируются и не открываются | основной адрес остаётся публичным |
| Вход в приложение | форма входа внутри проекта | видит только тот, у кого есть учётные данные | требует отдельной работы, обычно позже |
| Адрес, который никто не знает | ничем | ничего | это не защита вовсе |
Последняя строка - главная. Расчёт на то, что ссылку никто не угадает, в безопасности имеет отдельное название и репутацию плохой практики.
Про то, какие ещё слова путаются в этой области, я собрал отдельный словарь вайбкодинга.
Почему «ссылку никто не знает» - это не защита?
Список способов, которыми открытый адрес перестаёт быть тайной, скучный и очень короткий:
- Переслал коллеге. Дальше он переслал ещё кому-то, и цепочку уже никто не контролирует.
- Открыл на конференции с проектора. Адрес видно в строке браузера.
- Поставил ссылку где-нибудь снаружи. Поисковый робот приходит по ссылке и добавляет страницу в индекс.
- Расширения браузера и аналитика. Адрес уезжает в чужие системы просто потому, что ты его открыл.
Ни один из этих сценариев не требует злого умысла. Именно поэтому в закрытом контуре компании расчёт на секретность адреса не считается защитой.
Пока внутри проекта выдуманные данные, риск нулевой. Как только туда попадают реальные документы клиента, договоры или персональные данные людей, открытая ссылка превращается в утечку. Про то, где вообще проходит граница чувствительных данных, я писал в материале про документы компании и нейросети.
Проверка в инкогнито за минуту
Скопируй основной адрес проекта
Именно тот, который ты дал бы коллеге. Не служебный предпросмотр и не локальный адрес на своём компьютере.
Открой приватное окно браузера
В любом браузере это отдельный режим без истории и без входов. Обычная новая вкладка не подходит: она помнит, что ты вошёл.
Вставь адрес и посмотри, что открылось
Если проект показал содержимое без запроса пароля, значит его видит любой человек с этим адресом.
Проверь с телефона по мобильному интернету
Дополнительная проверка на случай, если доступ ограничен по сети офиса. Мобильный интернет имитирует постороннего лучше всего.
Мой рабочий приём: делаю эту проверку сразу после первой публикации и повторяю после каждой правки настроек доступа. Тридцать секунд, а отвечает на вопрос, на который иначе отвечаешь предположением.
Что можно класть в проект до появления входа?
Правило простое и жёсткое, потому что нарушают его почти все. Хочется проверить инструмент на настоящем материале, ведь на выдуманном непонятно, работает ли он.
Компромисс, который я даю ученикам: бери реальную структуру, но выдуманное содержимое. Настоящие поля, настоящий формат, настоящий объём - и вымышленные имена, суммы и адреса.
Что это даёт:
- Проверка честная. Инструмент видит те же поля и тот же объём, что в бою.
- Утечки нет. Даже если ссылка уйдёт, уйдёт вымышленный список.
- Не нужно ничего согласовывать. Ни с юристом, ни со службой безопасности.
- Переход в бой дешёвый. Когда появится вход, ты просто заменишь содержимое.
Обезличивание тут не формальность, а работа: менять надо не только имена, но и всё, по чему человека или компанию можно узнать - названия проектов, суммы сделок, редкие сочетания дат и городов.
Когда делать форму входа?
Порядок, который работает у непрограммиста:
- Первая неделя. Инструмент собирается на выдуманных данных. Никакого входа, никаких настроек доступа. Задача - понять, работает ли идея.
- Момент, когда захотелось показать коллеге. Показывай экраном на созвоне, а не ссылкой. Это ничего не стоит и ничего не открывает.
- Момент, когда коллеге нужно пользоваться самому. Вот здесь появляется вход. Не раньше.
- Момент, когда внутрь ложатся настоящие данные. Вход обязателен, а вместе с ним - разговор про то, где хранятся данные и кто за них отвечает.
Формулируй так, чтобы он не додумывал: «проверь, есть ли у моего хостинга настройка закрытия основного адреса, и если такой настройки нет или ты не уверен - скажи прямо, не придумывай». Агент охотно описывает функции, которых у площадки нет, и это как раз тот случай, где выдумка стоит дорого.
Что делать дальше, когда рабочая версия готова и пора думать про хостинг, данные и закон, разбирал в материале про то, что делать, когда прототип готов.
Домен - вывеска, а не замок
Отдельная путаница, которую стоит развести. Купленный домен вызывает ощущение солидности и заодно ощущение защищённости. Второе неверно.
Домен решает три задачи: адрес легко продиктовать, он выглядит как принадлежащий компании, и его не отберут вместе со сменой хостинга. Всё.
Отсюда практический вывод про очерёдность. Домен покупают, когда инструмент уже работает и им пользуются. Покупать домен для проекта, который живёт третий день, - тратить деньги на вывеску над стройкой.
То же и с оформлением: дизайн и адрес не имеют отношения к тому, можно ли класть внутрь реальные данные. Про разницу между «выглядит готовым» и «работает как надо» я писал в материале про приёмку работы агента.
Частые вопросы
Частые вопросы
Главный вывод
Ошибка тут не техническая, а смысловая: слово «приватный» относится к одной части конструкции, а человек распространяет его на всю.
Практический минимум на первую неделю выглядит так: приватное хранилище кода, выдуманные данные внутри, проверка в инкогнито после каждой публикации, показ коллегам экраном, а не ссылкой.
Про то, как из первого работающего прототипа вырастает то, чем реально пользуются, есть отдельный разбор вайбкодинга в продакшене. А сам подход к сборке без кода - в вайбкодинге как таковом.
Открой свой проект в инкогнито прямо сейчас. Что там увидит человек, которому ты никогда не давал доступа?
Источники
- Security through obscurity - обзорная статья о защите через неизвестность и её репутации, Википедия
- GitHub Docs - сведения о репозиториях и их видимости, русская версия
- Vercel - документация о защите развёртываний и о том, какие адреса она закрывает
- Basic access authentication - обзорная статья о простой форме проверки доступа, Википедия
- Федеральный закон «О персональных данных» от 27.07.2006 N 152-ФЗ, действующая редакция
