Firefox 74 带来更强大的安全性

今天发布了 Firefox 74 版本。本次更新最值得关注的功能是安全性的增强:功能策略、Cross-Origin-Resource-Policy 标头以及删除对 TLS 1.0/1.1 的支持。此外,我们还添加了一些新的 CSS 文本属性功能、JS 可选链操作符以及其他 2D 画布文本度量功能,以及一如既往的开发者工具改进和错误修复。

像往常一样,继续阅读以了解亮点,或查看以下文章中添加功能的完整列表

安全性改进

让我们看看 Firefox 74 版本的安全改进。

功能策略

我们终于默认启用了功能策略。现在,您可以使用 <iframe>allow 属性和 HTTP 标头 Feature-Policy 来定义顶级文档和 iframe 的权限功能。以下是一些语法示例

<iframe src="https://example.com" allow="fullscreen"></iframe>
Feature-Policy: microphone 'none'; geolocation 'none'

CORP

我们还启用了对 Cross-Origin-Resource-Policy (CORP) 标头的支持,允许网站和 Web 应用为某些跨源请求(例如来自 <img><script> 元素的请求)分配保护。这对于缓解旁路攻击(如 Spectre 和 Meltdown)以及跨站点脚本 (XSS) 攻击非常有用。

可用的值为 same-originsame-sitesame-origin 仅允许共享相同方案、主机和端口的请求读取相关资源。这在一定程度上为 Web 提供了超出同源策略的额外保护。same-site 仅允许共享相同站点的请求。

要使用 CORP,您需要在标头中设置其中一个值,例如

Cross-Origin-Resource-Policy: same-site

删除 TLS 1.0/1.1

最后但同样重要的是,Firefox 74 删除了对 TLS 1.0/1.1 的支持,以帮助提高 Web 平台的整体安全性。这对 TLS 生态系统的进步至关重要,并且消除了由于 TLS 1.0/1.1 不够强大而存在的一系列漏洞。因此,有必要将其移除。

此更改于 2018 年 10 月首次宣布,是 Mozilla、Microsoft 和 Apple 共同发起的倡议。现在,在 2020 年 3 月,我们都兑现了自己的承诺(除了 Apple,他们稍晚会进行更改)。

这意味着您需要确保您的 Web 服务器从现在开始支持 TLS 1.2 或 1.3。请阅读TLS 1.0 和 1.1 删除更新,了解如何测试和更新您的 TLS/SSL 配置。从现在开始,Firefox 在连接到使用旧版 TLS 的服务器时将显示“安全连接失败”错误页面。安全连接失败。如果您尚未更新,请立即更新

secure connection failed error message, due to connected server using TLS 1.0 or 1.1

注意:在某些更新中(以及 Firefox ESR 中的更长时间内),“安全连接失败”错误页面将包含一个覆盖按钮,允许您在服务器尚未更新的情况下启用 TLS 1.0 和 1.1,但不要指望此功能能持续太久。

要详细了解 TLS 1.0/1.1 的删除及其背后的原因,请阅读TLS 1.0 和 TLS 1.1 的终结

其他 Web 平台添加

Firefox 74 为您带来了更多 Web 平台添加。

新的 CSS 文本功能

首先,text-underline-position 属性已默认启用。这有助于在特定上下文中定位应用于文本的下划线,以实现特定的排版效果。

例如,如果文本的书写模式为水平方向,则可以使用 text-underline-position: under; 将下划线放置在所有后代元素下方;这对于确保化学和数学公式的可读性很有用,因为这些公式经常使用下标。

.horizontal {
text-underline-position: under;
}

在具有垂直writing-mode书写模式的文本中,我们可以使用 leftright 值,使下划线根据需要出现在文本的左侧或右侧。

.vertical {
  writing-mode: vertical-rl;
  text-underline-position: left;
}

此外,text-underline-offsettext-decoration-thickness 属性现在接受百分比值,例如

text-decoration-thickness: 10%;

对于这些属性,百分比是当前字体大小的 1em 的百分比。

JavaScript 可选链

现在,我们有了 JavaScript 的可选链操作符 (?.)。当您尝试按顺序访问一个对象中的另一个对象时,它允许您隐式检查第一个对象是否存在,从而避免错误并避免显式编写验证代码。

let nestedProp = obj.first?.second;

新的 2D 画布文本度量

TextMetrics API(使用 CanvasRenderingContext2D.measureText() 方法获取)已扩展为包含四个新的属性,用于测量实际边界框 (actualBondingBox):actualBoundingBoxLeftactualBoundingBoxRightactualBoundingBoxAscentactualBoundingBoxDescent

例如

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const text = ctx.measureText('Hello world');

text.width;                    // 56.08333206176758
text.actualBoundingBoxAscent; // 8
text.actualBoundingBoxDescent; // 0
text.actualBoundingBoxLeft;   // 0
text.actualBoundingBoxRight;   // 55.733333333333334

开发者工具添加

以下是开发者工具添加的功能。

设计模式下的类似设备渲染

尽管Firefox for Android 正在使用GeckoView 重新发布,以获得更快的速度和隐私,但开发者工具必须保持领先地位。移动设备测试应尽可能减少摩擦,无论是在桌面电脑上使用响应式设计模式 (RDM) 还是在设备上使用远程调试

为了让开发者能够在没有手边设备的情况下信任结果,响应式设计模式必须尽可能正确地工作。在最近的版本中,我们实施了重大改进,以确保meta viewport触摸模拟一起正确应用。这与改进的设备预设相关,这些预设会自动为移动设备启用触摸模拟。

animated gif showing how responsive design mode now represents view meta settings better

有趣的是,团队使这种模拟非常精确,以至于它已经能够识别和修复 Firefox for Android 的渲染错误。

开发者提示:通过工具菜单或 Ctrl + Shift + M(在 Windows 上)或 Cmd + Opt + M(在 macOS 上)打开响应式设计模式,而无需使用开发者工具。

我们希望在您使用 RDM 或在 Android 手机上使用Firefox Nightly for Developers 浏览您的网站后了解您的体验。

有用的 CSS 工具

关于非活动 CSS 规则的页面检查器中的新上下文警告收到了很多积极的反馈。它们可以帮助您解决复杂的 CSS 问题,同时向您展示级联样式表规则的复杂相互依赖关系。

自发布以来,我们一直在不断调整和添加规则,这些规则通常基于用户的反馈。在 74 版中,我们可以重点介绍一种新的检测配置,该配置会在属性依赖于定位元素时向您发出警告,主要是z-indextopleftbottomright
Firefox Page Inspector now showing inactive position-related properties such as z-index and top

您的反馈和意见将有助于我们完善和扩展规则。在Mozilla Matrix 实例上的 DevTools 聊天中向团队打招呼Mozilla Matrix 实例,或通过@FirefoxDevTools关注我们的工作。

嵌套工作线程调试

Firefox 的JavaScript 调试器团队在最近的版本中专注于优化Web Worker,以便更轻松地进行检查和调试。开发人员和框架越使用 Worker 将处理从主线程中分离出来,浏览器就越容易优先处理因用户操作而触发的正在执行的代码。

现在,调试器会显示嵌套 Web Worker,允许 Worker 生成和控制其自己的 Worker 实例

El depurador de JavaScript de Firefox ahora muestra los trabajadores anidados

改进的 React DevTools 集成

React 开发者工具插件 是许多与 Firefox 开发者工具紧密集成的开发者插件之一。借助WebExtensions API,开发者可以从同一代码库为所有浏览器构建和发布插件。

与 React 插件维护人员合作,我们正在努力重新启用和改进插件的上下文菜单,包括“转到定义”。此操作允许开发者从 React 组件直接跳转到调试器中的源文件。对于在检查器中跳转到元素,此功能已经启用。我们希望进一步开发它,以便框架工作流与其他工具完美对齐。

开发者版中的开发者功能抢先体验

开发者版 是 Firefox 的预发布渠道,可提供对工具和平台功能的抢先体验。它的配置还允许为开发者默认启用更多功能。我们希望尽快将新功能引入开发者版,以收集您的反馈,包括以下亮点。

控制台表达式的即时评估

使用即时评估来探索 JavaScript 和 DOM 对象和函数似乎很神奇。只要在Web 控制台中键入的表达式没有副作用,就会在您键入时预览其结果,这使您可以比以往更快地识别和修复错误。

调试器和控制台的异步堆栈跟踪

现代 JavaScript 编程在很大程度上依赖于async/await 堆栈,以及其他异步操作,如事件Promise超时。由于与 JavaScript 引擎的更好集成,现在可以捕获异步执行以提供更完整的画面。

调试器中的异步调用堆栈允许您遍历随着时间推移而执行的事件、超时和基于 Promise 的函数调用。在控制台中,异步调用堆栈使您可以轻松找到错误的根本原因。

pila de llamadas asíncronas vista en el depurador de JavaScript de Firefox

服务工作线程调试一瞥

它已经在 Nightly 中存在一段时间了,我们非常高兴很快就能将其提供给您。请在 4 周内成为开发者版的 Firefox 76 中期待它。

关于 Chris Mills

Chris Mills 是 Mozilla 的高级技术作家,他撰写有关开放式 Web 应用、HTML/CSS/JavaScript、A11y、WebAssembly 等方面的文档和演示。他喜欢捣鼓 Web 技术,并在会议和大学偶尔进行技术演讲。他曾为 Opera 和 W3C 工作,喜欢演奏重金属鼓和喝好啤酒。他和他的妻子以及三个可爱的孩子住在英国曼彻斯特附近。

更多 Chris Mills 的文章…