Aller au contenu

Sécurité

La page est servie depuis droid.devpier.dev, mais l’émulateur et la passerelle tournent sur votre Mac. N’importe quelle page web que vous ouvrez pourrait tenter de se connecter à un programme sur votre Mac, c’est pourquoi la passerelle vérifie chaque connexion.

La passerelle écoute uniquement sur 127.0.0.1. Elle n’accepte pas de connexions depuis votre réseau local ni depuis Internet. Les autres ordinateurs ne peuvent pas l’atteindre.

Les navigateurs envoient un en-tête Origin lorsqu’une page ouvre un WebSocket. La passerelle n’accepte que ces origines :

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

Une connexion avec toute autre origine, ou sans origine, est fermée avec le code 4003. Une page d’un autre site ne peut pas contrôler votre émulateur, même si elle devine le port.

  • À chaque démarrage, la passerelle crée un nouveau jeton aléatoire : 32 octets aléatoires, encodés en une chaîne base64url de 43 caractères.
  • La passerelle ouvre la page avec le port et le jeton après # : https://droid.devpier.dev/app/#port=<port>&token=<token>. Les navigateurs n’envoient pas la partie située après # au serveur web, donc le jeton n’atteint jamais droid.devpier.dev.
  • La page enregistre le port et le jeton dans le stockage local du navigateur, pour que vous puissiez recharger la page, et les retire de la barre d’adresse.
  • Le premier message de chaque connexion doit contenir le jeton. S’il est incorrect, la passerelle répond par une erreur bad-token et ferme la connexion avec le code 4001.
  • Quand la passerelle redémarre, l’ancien jeton cesse de fonctionner. Ouvrez le nouveau lien qu’elle affiche.

L’autorisation d’accès au réseau local de Chrome et la vérification d’origine de la passerelle fonctionnent toutes deux par site, et non par chemin. Les pages de documentation partagent donc l’autorisation avec la page de l’émulateur sous /app/. Pour limiter ce que cela implique :

  • Seule la page de l’émulateur sous /app/ se connecte à la passerelle. La page d’accueil et cette documentation ne le font jamais, donc les lire ne déclenche pas la demande d’autorisation.
  • Le site ne charge aucun script, style, police ou média tiers. Tout est servi depuis droid.devpier.dev.
  • Le jeton est une deuxième vérification : une page sur droid.devpier.dev sans le jeton ne peut pas utiliser la passerelle.

La passerelle n’installe jamais de paquets de l’Android SDK et ne crée jamais d’appareils sans demander. Elle demande [y/N] dans Terminal, et la réponse par défaut est non. C’est vous qui acceptez les licences de l’Android SDK.

Code Signification
4000 Le premier message n’était pas hello.
4001 Jeton incorrect.
4002 La page et la passerelle utilisent des versions de protocole différentes.
4003 Origine non autorisée.

Ouvrez une issue sur github.com/twosugar/android-emu-web.