polyfill.io 现已在 cdnjs 上可用:降低供应链风险
内容提要
Polyfill.io是一个流行的JavaScript库,用于简化开发并消除旧浏览器版本之间的差异。现在推出了一个替代端点,可以使用cdnjs链接,以解决polyfill.io域名转移引发的担忧。Polyfill文件存储在由Cloudflare D1提供支持的键值存储中。
延伸解读
供应链风险与应对
文章指出,polyfill.io域名转移至新提供商Funnull后,社区担忧其可能被入侵或恶意修改代码,导致使用该库的网站遭受供应链攻击。为此,cdnjs推出了替代端点,让开发者可以继续使用polyfill功能,同时依赖cdnjs的声誉来降低风险。这提醒我们,第三方脚本的安全管理至关重要。
迁移与部署的便利性
开发者只需将原有polyfill.io链接替换为cdnjs的链接即可,无需修改其他代码。对于使用Cloudflare的网站,还可以通过部署Cloudflare Worker自动重写链接,简化迁移过程。Worker代码示例展示了如何将polyfill.io的请求重定向到cdnjs,并保持路径结构。
技术实现与性能优化
新的polyfill服务基于Rust开发,并部署在Cloudflare Workers上。polyfill文件存储在Cloudflare D1键值存储中,每个区域有一个D1实例,SQL查询路由到最近的数据库,从而提升性能。与原实现相比,这种设计通过单次SQL查询获取多个文件,减少了多次KV读取的开销。
Q&A
polyfill.io 是什么?它有什么作用?
polyfill.io 是一个流行的 JavaScript 库,用于消除旧浏览器版本之间的差异。它通过添加对现代函数的支持(即 polyfill),让开发者能够针对统一的环境进行开发,从而简化开发工作。
为什么 cdnjs 要推出 polyfill.io 的替代端点?
因为 polyfill.io 域名转移到了新提供商 Funnull,社区和主要贡献者担心依赖该域名可能导致供应链攻击。如果底层第三方被入侵或以恶意方式更改代码,所有使用该工具的网站都会受到牵连。因此 cdnjs 推出了替代端点,让开发者可以依赖 cdnjs 多年积累的服务和声誉。
如何将现有 polyfill.io 链接替换为 cdnjs 的端点?
开发者只需将旧链接直接替换为新的 cdnjs 托管链接即可,使用方式与原 polyfill.io 完全相同。压缩版链接为 https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js,未压缩版为 https://cdnjs.cloudflare.com/polyfill/v3/polyfill.js。如果网站使用 Cloudflare,还可以部署 Cloudflare Worker 自动更新链接。
cdnjs 上的 polyfill 服务是如何实现的?
该服务基于 Rust 开发,并部署在 Cloudflare Workers 上。cdnjs 对 polyfill.io 项目进行了 fork,添加了 Cloudflare Workers 的兼容性。所有 polyfill 文件存储在由 Cloudflare D1 提供支持的键值存储中,每个区域有一个 D1 实例,SQL 查询会路由到最近的数据库,以提高性能。
使用 cdnjs 的 polyfill 端点有什么好处?
使用 cdnjs 的端点可以依赖 cdnjs 多年积累的服务和声誉,降低因原 polyfill.io 域名转移而可能引发的供应链攻击风险。此外,由于采用了 Cloudflare D1 键值存储和区域化数据库路由,性能可能得到提升,可靠性也更有保障。
什么是供应链攻击?Page Shield 与此有何关系?
供应链攻击是指第三方组件被入侵或被恶意篡改,导致所有使用该组件的网站受到牵连。在 Web 应用领域,这类攻击日益受到安全团队关注。为此,Cloudflare 开发了客户端安全产品 Page Shield,用于检测和缓解此类攻击向量。Page Shield 对所有付费计划可用,登录后一键即可开启。