Salta ai contenuti

Sicurezza

La pagina viene servita da droid.devpier.dev, ma l’emulatore e il gateway girano sul tuo Mac. Qualsiasi pagina web che apri potrebbe tentare di connettersi a un programma sul tuo Mac, quindi il gateway controlla ogni connessione.

Il gateway è in ascolto solo su 127.0.0.1. Non accetta connessioni dalla tua rete locale né da Internet. Altri computer non possono raggiungerlo.

I browser inviano un’intestazione Origin quando una pagina apre un WebSocket. Il gateway accetta solo queste origini:

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

Una connessione con qualsiasi altra origine, o senza origine, viene chiusa con il codice 4003. Una pagina su un altro sito non può controllare il tuo emulatore, anche se indovina la porta.

  • A ogni avvio, il gateway crea un nuovo token casuale: 32 byte casuali, codificati come stringa base64url di 43 caratteri.
  • Il gateway apre la pagina con porta e token dopo #: https://droid.devpier.dev/app/#port=<port>&token=<token>. I browser non inviano al server web la parte dopo #, quindi il token non raggiunge mai droid.devpier.dev.
  • La pagina salva porta e token nel local storage del browser, così puoi ricaricare la pagina, e li rimuove dalla barra degli indirizzi.
  • Il primo messaggio di ogni connessione deve contenere il token. Se è sbagliato, il gateway risponde con un errore bad-token e chiude la connessione con il codice 4001.
  • Quando il gateway si riavvia, il vecchio token smette di funzionare. Apri il nuovo link che stampa.

L’autorizzazione di Chrome per la rete locale e il controllo dell’origine del gateway funzionano entrambi per sito, non per percorso. Quindi le pagine della documentazione condividono l’autorizzazione con la pagina dell’emulatore in /app/. Per limitare le conseguenze:

  • Solo la pagina dell’emulatore in /app/ si connette al gateway. La home page e questa documentazione non lo fanno mai, quindi leggerle non fa comparire la richiesta di autorizzazione.
  • Il sito non carica script, stili, font o contenuti multimediali di terze parti. Tutto viene servito da droid.devpier.dev.
  • Il token è un secondo controllo: una pagina su droid.devpier.dev senza il token non può usare il gateway.

Il gateway non installa mai pacchetti dell’Android SDK né crea dispositivi senza chiedere. Chiede [y/N] nel Terminale, e la risposta predefinita è no. Le licenze dell’Android SDK le accetti tu stesso.

Codice Significato
4000 Il primo messaggio non era hello.
4001 Token errato.
4002 La pagina e il gateway usano versioni del protocollo diverse.
4003 Origine non consentita.

Apri una issue su github.com/twosugar/android-emu-web.