Pular para o conteúdo

Segurança

A página é servida a partir de droid.devpier.dev, mas o emulador e o gateway rodam no seu Mac. Qualquer página web que você abrir poderia tentar se conectar a um programa no seu Mac, então o gateway verifica cada conexão.

O gateway escuta apenas em 127.0.0.1. Ele não aceita conexões da sua rede local nem da internet. Outros computadores não conseguem alcançá-lo.

Os navegadores enviam um cabeçalho Origin quando uma página abre um WebSocket. O gateway aceita apenas estas origens:

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

Uma conexão com qualquer outra origem, ou sem origem, é fechada com o código 4003. Uma página de outro site não consegue controlar seu emulador, mesmo que adivinhe a porta.

  • Cada vez que o gateway é iniciado, ele cria um novo token aleatório: 32 bytes aleatórios, codificados como uma string base64url de 43 caracteres.
  • O gateway abre a página com a porta e o token depois de #: https://droid.devpier.dev/app/#port=<port>&token=<token>. Os navegadores não enviam ao servidor web a parte depois de #, então o token nunca chega a droid.devpier.dev.
  • A página salva a porta e o token no armazenamento local do navegador, para que você possa recarregar a página, e os remove da barra de endereços.
  • A primeira mensagem de cada conexão deve conter o token. Se ele estiver errado, o gateway responde com um erro bad-token e fecha a conexão com o código 4001.
  • Quando o gateway reinicia, o token antigo deixa de funcionar. Abra o novo link que ele mostra.

A permissão de rede local do Chrome e a verificação de Origin do gateway funcionam por site, não por caminho. Por isso, as páginas de documentação compartilham a permissão com a página do emulador em /app/. Para limitar o que isso significa:

  • Apenas a página do emulador em /app/ se conecta ao gateway. A página inicial e esta documentação nunca fazem isso, então lê-las não dispara a solicitação de permissão.
  • O site não carrega scripts, estilos, fontes ou mídia de terceiros. Tudo é servido a partir de droid.devpier.dev.
  • O token é uma segunda verificação: uma página em droid.devpier.dev sem o token não consegue usar o gateway.

O gateway nunca instala pacotes do Android SDK nem cria dispositivos sem perguntar. Ele pergunta [y/N] no Terminal, e o padrão é não. Você mesmo aceita as licenças do Android SDK.

Código Significado
4000 A primeira mensagem não foi hello.
4001 Token errado.
4002 A página e o gateway usam versões de protocolo diferentes.
4003 Origem não permitida.

Abra uma issue em github.com/twosugar/android-emu-web.