保护 Gamepad API

Gamepad API 更新的 Firefox 发布日期

作为 Mozilla 持续改进 Web 平台隐私和安全性的承诺的一部分,在接下来的几个月里,我们将对 Gamepad_API 的工作方式进行一些更改。

以下是需要牢记的重要日期

2020 年 8 月 25 日(Firefox 81 Beta/开发者版
.<a href="https://mdn.org.cn/en-US/docs/Web/API/Navigator/getGamepads">getGamepads()</a> 方法只会在“安全环境”(例如 https://)中调用时返回游戏手柄。
2020 年 9 月 22 日(Firefox 82 Beta/开发者版
切换到为第三方环境/iframe 要求权限策略。

我们正在与来自 Chrome 团队和其他浏览器供应商的人员合作进行这些更改。我们将更新这篇文章,提供指向他们公告的链接,这些链接将在他们发布后提供。

将游戏手柄限制为安全环境

从 Firefox 81 开始,Gamepad API 将被限制为所谓的“安全环境”(错误 1591329)。基本上,这意味着 Gamepad API 仅在作为“https://”提供的网站上工作。但别担心,当您调试时,它也可以在 http://localhost 上工作!

在接下来的几个月里,每当从不安全的环境中调用 .getGamepads() 方法时,我们将显示开发人员控制台警告。

从 Firefox 81 开始,我们计划默认情况下为 .getGamepads() 要求安全环境。为了避免代码出现重大问题,调用 .getGamepads() 将返回一个空数组。我们将无限期地显示此控制台警告。

Firefox developer console

开发人员控制台现在显示从不安全的环境中调用 .getGamepads() 方法时的警告

权限策略集成

从 Firefox 82 开始,需要访问 Gamepad API 的第三方环境(即不是同一来源的 <iframe>)必须由托管网站通过 权限策略 显式授予访问权限。

为了使第三方环境能够使用 Gamepad API,您需要在您的 HTML 中添加一个“允许”属性,如下所示

  <iframe allow="gamepad" src="https://example.com/">
  </iframe>

一旦发布,从被禁止的第三方环境中调用 .getGamepads() 将会引发 JavaScript 安全错误。

您可以在 错误 1640086 中跟踪我们的实现进度。

WebVR/WebXR

由于 WebVR 和 WebXR 已经要求安全环境才能工作,因此这些更改
不应影响任何依赖于 .getGamepads() 的网站。事实上,一切应该像今天一样继续工作。

未来改进隐私和安全性

当我们发布 API 时,我们经常发现网站以意想不到的方式使用它们——大多数是创造性的,有时是恶意的。随着新隐私和安全功能添加到 Web 平台,我们对这些解决方案进行改进,以更好地保护用户免受恶意网站和第三方跟踪器的侵害。

向 Gamepad API 添加“安全环境”和“权限策略”是这项持续努力的一部分,旨在提高 Web 的整体隐私和安全性。虽然我们知道这些更改可能会给开发人员带来短期不便,但我们认为不断发展 Web 以使其尽可能安全和保护隐私对所有用户都至关重要。

关于 Marcos Caceres

Marcos Caceres 的更多文章……


6 条评论

  1. Constantin

    在屏幕截图中,显示的 URL 指向……2020/06/securing…,但这是 404。它应该是……2020/07/securing…
    请在帖子中修复它,更重要的是在 Firefox 中修复它 ;-)

    2020 年 7 月 2 日 08:07

    1. Marcos Caceres

      感谢 Constantin!已在帖子和 Firefox 中修复。

      2020 年 7 月 5 日 22:01

  2. Jim Harris

    那些需要不安全环境的用例怎么办?(或者非常理想。)

    就我而言,我正在开发一个基于 Raspberry Pi 的机器人,它将使用连接到不同计算机的操纵杆,通过连接到机器人上的简单视频流服务器的浏览器远程控制机器人。

    我在 Firefox 上进行主要开发,因为这将为我提供最广泛的浏览器覆盖范围“开箱即用”。Win、Mac、‘nix,你叫它什么,所有这些都会工作,而且都会很好地工作。

    有了它,任何想要实现一个简单的操纵杆启用项目的人都需要确保每个廉价的实现都需要一个昂贵的第三方证书才能在教室中的每个机器人上使用?学区已经很难为机器人争取资金了——现在你希望他们被 Verisign 或 Comodo 缠住吗?

    我认为这是个坏主意。

    也许对于直接的浏览器到服务器连接可以有一个例外,也许甚至需要它们在同一个网络上?

    我同意。互联网是一个肮脏的地方,安全很重要。但是,让我们不要把孩子和洗澡水一起倒掉。好吗?

    2020 年 7 月 2 日 11:24

    1. Marcos Caceres

      Mozilla 启动了 Let’s Encrypt 来解决这个问题 :) 你可以免费获得证书,它被 2.25 亿多个网站使用。

      2020 年 7 月 5 日 21:53

  3. 匿名

    也许应该为 localhost 提供一个例外?
    因此,您仍然可以在 http 上使用 gamepad,只要它是 localhost 即可。

    2020 年 7 月 22 日 05:55

    1. Marcos Caceres

      啊,好观点!SecureContext 的定义包括 localhost,否则你说的没错,这会让开发人员很困难。我将确认并更新帖子。

      2020 年 7 月 22 日 06:44

本文的评论已关闭。