跳转到内容

安全性

页面从 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。