跳到內容

安全性

頁面從 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 個隨機位元組,編碼為 43 個字元的 base64url 字串。
  • 閘道在 # 後附上連接埠和權杖開啟頁面:https://droid.devpier.dev/app/#port=<port>&token=<token>。瀏覽器不會將 # 後的內容傳送到 Web 伺服器,因此權杖不會到達 droid.devpier.dev。
  • 頁面將連接埠和權杖儲存在瀏覽器的本機儲存體中,以便你可以重新載入頁面,並從位址列移除它們。
  • 每個連線的第一條訊息必須攜帶權杖。如果權杖錯誤,閘道會回覆 bad-token 錯誤並以代碼 4001 關閉連線。
  • 閘道重新啟動後,舊權杖將失效。請開啟它列印的新連結。

Chrome 的本機網路權限和閘道的來源檢查都是基於網站而非路徑的。因此文件頁面與 /app/ 上的模擬器頁面共享同一權限。為限制其影響:

  • 只有 /app/ 上的模擬器頁面才會連接到閘道。首頁和這些文件頁面不會連接,因此閱讀它們不會觸發權限提示。
  • 該網站不載入任何第三方腳本、樣式、字型或媒體。所有內容均從 droid.devpier.dev 提供。
  • 權杖是第二道檢查:droid.devpier.dev 上沒有權杖的頁面無法使用閘道。

閘道在未經詢問的情況下,不會安裝 Android SDK 套件或建立裝置。它會在終端機中詢問 [y/N],預設答案為否。Android SDK 授權條款需要你自行接受。

代碼 含義
4000 第一條訊息不是 hello。
4001 權杖錯誤。
4002 頁面和閘道使用不同的協定版本。
4003 來源不被允許。

在 github.com/twosugar/android-emu-web 提交 issue。