Ir al contenido

Seguridad

La página se sirve desde droid.devpier.dev, pero el emulador y el gateway se ejecutan en tu Mac. Cualquier página web que abras podría intentar conectarse a un programa en tu Mac, así que el gateway comprueba cada conexión.

El gateway escucha solo en 127.0.0.1. No acepta conexiones de tu red local ni de internet. Otras computadoras no pueden llegar a él.

Los navegadores envían un encabezado Origin cuando una página abre un WebSocket. El gateway acepta solo estos orígenes:

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

Una conexión con cualquier otro origen, o sin origen, se cierra con el código 4003. Una página de otro sitio no puede controlar tu emulador, aunque adivine el puerto.

  • Cada vez que el gateway se inicia, crea un nuevo token aleatorio: 32 bytes aleatorios, codificados como una cadena base64url de 43 caracteres.
  • El gateway abre la página con el puerto y el token después de #: https://droid.devpier.dev/app/#port=<port>&token=<token>. Los navegadores no envían al servidor web la parte que va después de #, así que el token nunca llega a droid.devpier.dev.
  • La página guarda el puerto y el token en el almacenamiento local del navegador, para que puedas recargar la página, y los quita de la barra de direcciones.
  • El primer mensaje de cada conexión debe llevar el token. Si es incorrecto, el gateway responde con un error bad-token y cierra la conexión con el código 4001.
  • Cuando el gateway se reinicia, el token anterior deja de funcionar. Abre el nuevo enlace que muestra.

El permiso de red local de Chrome y la comprobación de Origin del gateway funcionan por sitio, no por ruta. Por eso, las páginas de documentación comparten el permiso con la página del emulador en /app/. Para limitar lo que eso implica:

  • Solo la página del emulador en /app/ se conecta al gateway. La página de inicio y esta documentación nunca lo hacen, así que leerlas no activa el aviso de permiso.
  • El sitio no carga scripts, estilos, fuentes ni contenido multimedia de terceros. Todo se sirve desde droid.devpier.dev.
  • El token es una segunda comprobación: una página en droid.devpier.dev sin el token no puede usar el gateway.

El gateway nunca instala paquetes del Android SDK ni crea dispositivos sin preguntar. Pregunta [y/N] en Terminal, y la respuesta predeterminada es no. Las licencias del Android SDK las aceptas tú mismo.

Código Significado
4000 El primer mensaje no fue hello.
4001 Token incorrecto.
4002 La página y el gateway usan versiones de protocolo diferentes.
4003 Origen no permitido.

Abre un issue en github.com/twosugar/android-emu-web.