Перейти к содержимому

Безопасность

Страница отдаётся с droid.devpier.dev, но эмулятор и шлюз работают на вашем Mac. Любая открытая вами веб-страница может попытаться подключиться к программе на вашем Mac, поэтому шлюз проверяет каждое подключение.

Шлюз слушает только 127.0.0.1. Он не принимает подключения из вашей локальной сети или из интернета. Другие компьютеры не могут к нему подключиться.

Когда страница открывает WebSocket, браузер отправляет заголовок Origin. Шлюз принимает только эти источники:

  • https://droid.devpier.dev
  • http://127.0.0.1:<port>
  • http://localhost:<port>

Подключение с любым другим источником или без источника закрывается с кодом 4003. Страница на другом сайте не может управлять вашим эмулятором, даже если угадает порт.

  • При каждом запуске шлюз создаёт новый случайный токен: 32 случайных байта, закодированных в строку base64url длиной 43 символа.
  • Шлюз открывает страницу с портом и токеном после #: https://droid.devpier.dev/app/#port=<port>&token=<token>. Браузеры не отправляют на веб-сервер часть после #, поэтому токен никогда не попадает на droid.devpier.dev.
  • Страница сохраняет порт и токен в локальном хранилище браузера, чтобы страницу можно было перезагрузить, и убирает их из адресной строки.
  • Первое сообщение каждого подключения должно содержать токен. Если он неверный, шлюз отвечает ошибкой bad-token и закрывает подключение с кодом 4001.
  • После перезапуска шлюза старый токен перестаёт работать. Откройте новую ссылку, которую он выводит.

Разрешение Chrome на доступ к локальной сети и проверка Origin в шлюзе действуют на уровне сайта, а не пути. Поэтому страницы документации разделяют это разрешение со страницей эмулятора по адресу /app/. Чтобы ограничить последствия этого:

  • К шлюзу подключается только страница эмулятора по адресу /app/. Главная страница и эта документация никогда этого не делают, поэтому их чтение не вызывает запрос разрешения.
  • Сайт не загружает сторонние скрипты, стили, шрифты или медиафайлы. Всё отдаётся с droid.devpier.dev.
  • Токен — вторая проверка: страница на droid.devpier.dev без токена не может использовать шлюз.

Шлюз никогда не устанавливает пакеты Android SDK и не создаёт устройства, не спросив. Он спрашивает [y/N] в Терминале, и ответ по умолчанию — «нет». Лицензии Android SDK вы принимаете сами.

Код Значение
4000 Первое сообщение не было hello.
4001 Неверный токен.
4002 Страница и шлюз используют разные версии протокола.
4003 Origin не разрешён.

Создайте issue на github.com/twosugar/android-emu-web.