№12

27 августа 2026

инструменты · агенты

Как показать ChatGPT страницу за логином и не отдать ему вашу сессию

ChatGPT читает закрытую логином страницу вашей админки или личного кабинета и получает только её текстовую копию без куков и токенов.

2 мин чтения · Бесплатно · 15 мин, если есть Node

Где подвох
Проект выложен 10 мая 2026 года и с тех пор не обновлялся, лицензии у него нет, а работает он с вашей рабочей сессией. Временную ссылку откроет любой, кто её знает.

Как повторить

  1. Клонируйте репозиторий chatgpt-portal себе на компьютер. Код небольшой, поэтому перед запуском стоит прочитать папку src. Если нужна публичная ссылка, поставьте cloudflared: эта программа даёт серверу на вашем компьютере временный адрес в интернете. Лицензии у проекта нет, все права на код остаются у автора. Для личного разового запуска это вопрос теоретический, для встраивания в клиентский продукт уже нет. В папке проекта выполните:
   npm install
  1. Запустите мост и укажите сайт, который хотите показать:
   CHATGPT_PORTAL_ALLOWLIST=https://intranet.example.com npm run share
   Share this URL with ChatGPT:
   https://<random-name>.trycloudflare.com/s/<session-token>/view
  1. Войдите в аккаунт в открывшемся Chrome вручную. Это отдельный профиль, ваших основных входов в нём нет, и сам инструмент не логинится.
  1. Скопируйте из README готовый промпт-передачу без изменений и отправьте его ChatGPT вместе со ссылкой. Промпт перечисляет, какими маршрутами моста пользоваться и чего у вас не просить: куки, токены, CSRF-поля (служебные защитные поля форм), файлы профиля, сырые заголовки.
  1. Туннель можно держать отдельно:
   CHATGPT_PORTAL_ALLOWLIST=https://intranet.example.com npm run dev
  1. Настройки моста:
   CHATGPT_PORTAL_TARGET=https://intranet.example.com/dashboard
   CHATGPT_PORTAL_PORT=7777
   CHATGPT_PORTAL_CDP_PORT=9222
   CHATGPT_PORTAL_ALLOW_SUBDOMAINS=1
   CHATGPT_PORTAL_UPLOAD_DIR=.local/uploads
   CHATGPT_PORTAL_TOKEN_TTL_MINUTES=240
   CHATGPT_PORTAL_NO_LAUNCH=1

До первого запуска проверьте две из них. CHATGPT_PORTAL_TOKEN_TTL_MINUTES задаёт срок жизни ссылки, по умолчанию четыре часа. CHATGPT_PORTAL_ALLOW_SUBDOMAINS по умолчанию разрешает поддомены: разрешили example.com, значит открыт и app.example.com. Чтобы оставить ровно один хост, поставьте 0.

  1. Когда закончите, завершите сессию запросом POST /shutdown?token=SESSION_TOKEN. Ссылку никому не пересылайте: пока токен жив, кроме него в адресе ничто не защищает.

Как проверить результат

Запустите тесты проекта: они компилируют TypeScript и проверяют в том числе вычистку данных и запрет действий.

npm run check

Затем откройте ссылку в обычном браузере и посмотрите, какую копию страницы получит модель. Если в ней есть поля пароля, скрытые поля или скрипты, дальше не идите. Напоследок попросите модель нажать «удалить» или «отправить». Рабочая сборка откажет и сообщит, что действие заблокировано моделью безопасности портала.

Как это устроено

  • Модель получает текстовую копию страницы в markdown с заголовками, текстом, ссылками, кнопками и формами. Из неё удалены куки, токены, заголовки авторизации, localStorage, sessionStorage, скрытые поля, поля паролей, скрипты и сырые формы.
  • Модели доступны чтение, переходы по ссылкам, вкладкам и меню, выбор чекбоксов, ввод несекретного текста и загрузка файла из заранее заданной папки. Сохранение, отправка, удаление, оплата, скачивание и ввод учётных данных заблокированы.
  • Мост открывает только домены из списка при запуске, по умолчанию вместе с их поддоменами.

Ссылки

Больше подобного

Разбираю по находке в день и складываю сюда. Свежее и то, что до сайта не доехало, выходит в канале «Евдокимов как обычно».