Media Cookie Broker

Передаёт браузерные cookies серверным приложениям, не открывая им доступ к браузерному профилю.

Media Cookie Broker передаёт cookies из обычного браузера программе, которая работает на сервере без графического интерфейса. Основной сценарий — YouTube и yt-dlp: человек входит в аккаунт через Chromium и вручную обновляет cookies в брокере, а процесс на Linux-сервере получает их в стандартном файле cookies.txt.

Сам браузерный профиль на сервер не переносится. Серверная программа не управляет Chromium и не пытается самостоятельно войти в аккаунт, пройти CAPTCHA или двухфакторную аутентификацию. Если сессия перестала работать, человек восстанавливает её в браузере и снова отправляет cookies в брокер.

Как cookies попадают на сервер

В Chromium 120 или новее устанавливают распакованное расширение Manifest V3. Пользователь входит на нужный сайт и вручную запускает обновление. Расширение собирает cookies для заданного сервиса и отправляет их в брокер. Для записи у него есть отдельная пара логина и пароля.

Брокер записывает полученный набор cookies в SQLite и присваивает ему номер ревизии. Утилита cookie-sync на Linux-сервере периодически проверяет, не появилась ли новая ревизия. Обнаружив обновление, она забирает его под отдельной учётной записью для чтения и атомарно заменяет локальный файл в формате Netscape с правами 0600. При сбое сети, расшифровки или записи рабочий файл остаётся на месте: потребитель продолжает использовать последнюю корректную версию.

yt-dlp или другая программа читает обычный cookies.txt и ничего не знает ни о расширении, ни о брокере. Media Cookie Broker только доставляет обновления и не участвует в дальнейшей работе потребителя.

Из чего состоит система

Система состоит из четырёх небольших компонентов:

В версии 0.3.1 расширение переписано с JavaScript на TypeScript.

Штатная схема предполагает Chromium на рабочем компьютере и отдельный Linux-сервер. Браузер подключается к брокеру через SSH-туннель с локальным портом, привязанным к loopback-интерфейсу, поэтому HTTP API не приходится открывать во внешнюю сеть. Там, где такой туннель неприменим, трафик нужно защищать с помощью HTTPS или передавать по приватной сети.

Границы защиты

Для записи и чтения брокер использует разные учётные записи HTTP Basic. Права каждой учётной записи ограничены конкретной операцией и набором cookies: клиент с доступом на чтение не может обновить этот набор или получить другие наборы. В SQLite данные зашифрованы с помощью AES-256-GCM, а ключ хранится отдельно от базы. Благодаря номерам ревизий cookie-sync не перезаписывает файл без необходимости; пять последних версий остаются в базе на случай восстановления.

Эти меры ограничивают доступ, но не меняют природу cookies: это аутентификационные данные на предъявителя (bearer credentials). Тот, кто ими завладел, может использовать браузерную сессию. Шифрование базы не поможет, если атакующий одновременно получил доступ к хосту и ключу. Расширение хранит пароль для записи в chrome.storage.local, поэтому безопасность системы зависит и от браузерного профиля, и от рабочей станции. На Linux-сервере cookies уже записаны в расшифрованном виде в cookies.txt, доступный авторизованному потребителю; компрометация этого сервера также раскрывает их.

Установка и поддерживаемый контур

Установочные скрипты версии 0.3.1 рассчитаны именно на этот выпуск и на поддерживаемую схему с Linux-сервером. Вариант с Docker Compose собирает брокер локально из исходников: готового образа в реестре контейнеров нет. Расширение устанавливают в Chromium вручную, выбрав распакованный каталог.

Проект ещё не достиг версии 1.0 и не обещает бесшовного обновления. При переходе с 0.1.0 нужна чистая установка. Основной проверенный сценарий — YouTube → yt-dlp; поддержка TikTok, Instagram, X и VK пока экспериментальная.

В текущей версии нет поддержки Firefox, установщиков для других ОС, веб-панели администратора, OAuth, отказоустойчивой репликации, подключения провайдеров во время работы и автоматической проверки сессии после обновления cookies. Брокер не обходит антибот-защиту и не может гарантировать, что внешний сервис примет переданную сессию.