Как повторить
- Клонируйте репозиторий chatgpt-portal себе на компьютер. Код небольшой, поэтому перед запуском стоит прочитать папку
src. Если нужна публичная ссылка, поставьтеcloudflared: эта программа даёт серверу на вашем компьютере временный адрес в интернете. Лицензии у проекта нет, все права на код остаются у автора. Для личного разового запуска это вопрос теоретический, для встраивания в клиентский продукт уже нет. В папке проекта выполните:
npm install- Запустите мост и укажите сайт, который хотите показать:
CHATGPT_PORTAL_ALLOWLIST=https://intranet.example.com npm run share Share this URL with ChatGPT:
https://<random-name>.trycloudflare.com/s/<session-token>/view- Войдите в аккаунт в открывшемся Chrome вручную. Это отдельный профиль, ваших основных входов в нём нет, и сам инструмент не логинится.
- Скопируйте из README готовый промпт-передачу без изменений и отправьте его ChatGPT вместе со ссылкой. Промпт перечисляет, какими маршрутами моста пользоваться и чего у вас не просить: куки, токены, CSRF-поля (служебные защитные поля форм), файлы профиля, сырые заголовки.
- Туннель можно держать отдельно:
CHATGPT_PORTAL_ALLOWLIST=https://intranet.example.com npm run dev- Настройки моста:
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.
- Когда закончите, завершите сессию запросом
POST /shutdown?token=SESSION_TOKEN. Ссылку никому не пересылайте: пока токен жив, кроме него в адресе ничто не защищает.
Как проверить результат
Запустите тесты проекта: они компилируют TypeScript и проверяют в том числе вычистку данных и запрет действий.
npm run checkЗатем откройте ссылку в обычном браузере и посмотрите, какую копию страницы получит модель. Если в ней есть поля пароля, скрытые поля или скрипты, дальше не идите. Напоследок попросите модель нажать «удалить» или «отправить». Рабочая сборка откажет и сообщит, что действие заблокировано моделью безопасности портала.
Как это устроено
- Модель получает текстовую копию страницы в markdown с заголовками, текстом, ссылками, кнопками и формами. Из неё удалены куки, токены, заголовки авторизации, localStorage, sessionStorage, скрытые поля, поля паролей, скрипты и сырые формы.
- Модели доступны чтение, переходы по ссылкам, вкладкам и меню, выбор чекбоксов, ввод несекретного текста и загрузка файла из заранее заданной папки. Сохранение, отправка, удаление, оплата, скачивание и ввод учётных данных заблокированы.
- Мост открывает только домены из списка при запуске, по умолчанию вместе с их поддоменами.
Ссылки
- chatgpt-portal на GitHub: код, README с командами и готовым промптом для ChatGPT.