Defaults.Exposed

Defaults.Exposed修复 › 跨源隔离响应头(COOP / CORP / COEP)

如何修复 跨源隔离响应头(COOP / CORP / COEP)

三条可选的浏览器指令,控制别的网站可以如何与你的网站互动——在弹窗里打开它、嵌入它的图片和脚本,或把它的资源拉进自己的页面。它们是现代加固,而非基础必备,在我们的评分中属于提示性:缺失它们不会拉低你的评分。但其中两条安全的能堵住一处隐蔽的钓鱼和带宽窃取漏洞,而谨慎买家的 IT 团队会注意到它们的存在。

对您业务的关键影响: 这三条里有两条能封堵高级的弹窗钓鱼,并阻止别的网站盗链你的图片和脚本(这既花你的带宽,又可能泄露数据)。它们免费,开发人员约 15 分钟即可搞定,且不会弄坏任何东西。第三条属于高级,可能弄坏分析、字体和嵌入内容——大多数企业应将它关闭。它们都不影响你的评分,所以把它们当作锦上添花、而非临阵慌张:做那两条安全的,除非你确有需要,否则跳过那条有风险的。

这会让您付出什么代价

为什么它重要。 这些是面向未来的浏览器加固响应头。在我们的方法学里这三条都属于提示性——它们登记为零分,永远不动你的评分——因为它们是高级控制,一个网站完全可以正当地不用它们运作,而其中一条若误用还会造成损害。我们对它们做报告,是为了让你看清自己的处境。那两条安全的(COOP 和 CORP)确实值得加:免费、快速,能在不弄坏任何东西的前提下堵住真实的弹窗钓鱼和资源盗窃漏洞。

一句话说清这些是什么

当有人访问你的网站时,他们的浏览器不只是孤立地加载你的页面——它还会决定别的网站可以如何与你的网站互动。另一个站点能不能在弹窗里打开你的网站并一直抓着它?另一个站点能不能伸手把你的图片和脚本嵌进它自己的页面?你自己的网站能不能安全地使用某些强大且被锁定的浏览器特性?

这三条响应头是你网站发给每位访客浏览器的简短、隐形的指令,恰好回答这些问题。它们按缩写为人所知:

其中两条(COOP 和 CORP)加起来安全且确有用处。第三条(COEP)属于高级,若草率开启可能弄坏东西。

最重要的一点要先说清:在我们的评分中,这三条都属于提示性。它们不影响你的评分。缺一条不会让你损失什么。我们对它们做报告,是为了让你看清处境、收割简单的胜果——而不是为了让你为一个数字慌张。

这会让你付出什么代价

这些是小众风险,不是头条级的——但它们真实存在,而修复免费。

每一条实际上是什么

COOP——Cross-Origin-Opener-Policy(安全,推荐)

当另一个网站用弹窗或 window.open 打开你的网站时,两个窗口通常能保持对彼此的引用。这种链路可被滥用:打开方可以操纵或重定向你的窗口、读取它网址的片段,并利用你真实的域名上演足以乱真的钓鱼。COOP: same-origin 打破这种关系——你的窗口与任何跨源打开它的东西相隔离。正常浏览、你自己的内部链接和普通导航完全不受影响。

良好的状态长什么样:Cross-Origin-Opener-Policy: same-origin

CORP——Cross-Origin-Resource-Policy(安全,推荐)

默认情况下,你的图片、脚本和其他文件可被任何地方任何站点嵌入。CORP: same-origin 告诉浏览器拒绝对你资源的跨源嵌入——这样别的站点就不能盗链你的素材或把它们拉进自己的页面。你自己的网站照旧加载自己的资源;只有外部站点被挡住。

良好的状态长什么样:Cross-Origin-Resource-Policy: same-origin。(如果你有意发布供他人嵌入的素材——公开徽标、开放 API——你的开发人员可以对那些特定响应放宽它。)

COEP——Cross-Origin-Embedder-Policy(高级,通常关闭)

COEP 完成跨源隔离:与 COOP 结合后,它要求你页面加载的每一个资源都明确选择加入(通过 CORS 或 CORP)。做对了,这会解锁某些强大的浏览器特性(如 SharedArrayBuffer),并增加一层对 Spectre 类攻击的防护。但是因为它要求你加载的一切都选择加入,它很容易弄坏那些并非为选择加入而建的第三方工具——分析、字体、嵌入式小组件。大多数网站不需要它解锁的特性,也不该承担那份弄坏的风险。

**良好的状态长什么样:**对极少数确有需要的网站,Cross-Origin-Embedder-Policy: credentialless——更安全的取值,比 require-corp 更不容易弄坏外部资源。对其他所有人,缺失也没问题,我们的报告不会因此扣你的分。

如何修复(免费,约 15 分钟)

**把这交给你的 IT 人员或网页开发人员——修复是免费的。**加 COOP 和 CORP 是你服务器或 CDN 上的几条单行设置;没有许可费,也没有持续成本。给业主的唯一指令是:做那两条安全的,不要未经测试就启用 COEP。

这些是响应头,设在你网站响应产生的地方——如果你有 CDN(如 Cloudflare)就最方便在那里设,否则就在你的 Web 服务器配置里。

两条安全的响应头(推荐给所有人)

Cloudflare——Rules → Transform Rules → Modify Response Headers → Set:

Nginx:

add_header Cross-Origin-Opener-Policy   "same-origin" always;
add_header Cross-Origin-Resource-Policy "same-origin" always;

Apache:

Header always set Cross-Origin-Opener-Policy   "same-origin"
Header always set Cross-Origin-Resource-Policy "same-origin"

这些加起来安全,不会弄坏正常功能。部署后,重新加载几个页面,确认网站表现和之前完全一致(应该如此)。

那条高级响应头(仅在你确有需要时)

**未在测试环境中先行测试,请勿开启它。**COEP 可能弄坏分析、字体和嵌入式小组件。

**Cloudflare:**Transform Rules → 把 Cross-Origin-Embedder-Policy 设为 credentialless

Nginx:

add_header Cross-Origin-Embedder-Policy "credentialless" always;

credentialless 而非 require-corp——它更不容易弄坏外部资源。在测试环境彻底测试;留意任何停止加载的第三方脚本、字体或嵌入内容。如果有东西坏了、而你又并不真需要 COEP 解锁的特性,直接移除该响应头即可——没有它不会被罚分。

平台说明

常见错误

关于评分的说明

把话说得彻底明白:**这三项检查都不影响你的评分。**它们在我们的方法学里登记为提示性、零分,缺一条永远不会让你损失什么。我们把它们呈现出来,是因为那两条安全的是廉价、真实的改进,也因为看清全貌有用——而不是因为有个数字要去守。如果你在这里什么都不做,你的评分一模一样。如果你加上 COOP 和 CORP,你就免费堵住了几处真实(虽小众)的漏洞。这才是看待本页的正确方式:可选的锦上添花,外加一个被清楚标出、需要避开的陷阱。

常见问题

这些不影响我的评分——那我到底该不该费心?

其中两条该,一条多半不该。COOP 和 CORP 免费、几分钟搞定、不会弄坏你的网站——它们能堵住真实(虽小众)的攻击路径,所以值得作为廉价的安全卫生来做。COEP 属于高级,可能弄坏第三方工具,所以大多数企业应将它关闭,除非确有需要它解锁的浏览器特性。这三条都不改变你的得分,所以并不急——把那两条安全的当作下次开发人员进站时的顺手收尾即可。

我不懂技术——这是我必须去处理的事吗?

不用你亲自做,也不急。因为它们是提示性的,跳过它们你的评分不会有任何损失。如果你想加那两条安全的,把如何修复一节交给管理你网站或 CDN 的人——它无非是几条单行设置,修复免费。唯一要明确提示的是 COEP:告诉他们不要未经测试就开启它,因为它可能弄坏分析和嵌入式小组件。

这些和那些会影响我评分的响应头有什么不同?

那些计分的网页安全响应头——HTTPS 跳转、HSTS、Content-Security-Policy、点击劫持防护(X-Frame-Options)和 MIME 嗅探防护——防的是常见、被广泛利用的攻击,所以缺失它们会扣分。本页这三条(COOP、CORP、COEP)是更新、更专门的浏览器隔离控制。它们是良好实践,但还不是基线期望,所以我们报告它们却不计分。先做计分那些;这些是上面的锦上添花。

加上 COOP 或 CORP 会弄坏我的网站或合作伙伴的集成吗?

推荐的设置(两条都用 same-origin)是按安全设计的。COOP 只切断你网站在弹窗里被打开时与那些窗口的链路——正常浏览、你自己的页面和普通链接都不受影响。CORP 只阻止别的网站嵌入你的图片和脚本;你自己的网站照旧加载自己的资源。如果你确实提供了一些供别的网站嵌入的素材(比如公开徽标或一个 API),你的开发人员可以对那些特定响应使用更宽松的设置。真正有弄坏风险的是 COEP——除非已测试,否则让它保持关闭。

盗链到底让我损失什么?

当另一个网站不自己托管副本、而是直接从你服务器嵌入你的图片或脚本时,他们页面的每位访客都从你这里下载它——记在你的带宽账单上,还让你的素材出现在你未认可的语境里。对小企业而言这很少是灾难性的,但这是白白外流的钱,而 CORP(same-origin)会在浏览器层面把它挡住。它还能堵住一条高级(Spectre 类)浏览器攻击所依赖的隐蔽数据泄露路径。

这每一条良好的状态长什么样?

COOP:设为 same-origin 的 Cross-Origin-Opener-Policy 响应头。CORP:设为 same-origin 的 Cross-Origin-Resource-Policy 响应头。COEP:一条 Cross-Origin-Embedder-Policy 响应头——而如果你真要设,credentialless 比 require-corp 更安全。我们的报告只是记录每条是否存在、设成了什么;它绝不会因缺失某条而扣你的分。目标是让 COOP 和 CORP 存在;除非你已测试过,否则让 COEP 保持缺失。