前端周刊:axios 疑遭朝鲜黑客“钓鱼“;CSS 新函数上线;npm 上线深色主题;Oxlint 兼容表;ESLint 支持 Temporal......
🌐 今日要闻
打破信息壁垒,走近全球前端。Hello World 大家好,我是林语冰。
欢迎阅读《Web 周刊》,上周 Web 开发圈的主要情报包括:
- 🐞 Axios 主席疑遭朝鲜黑客“钓鱼“,自爆了社会工程的诈骗过程
- 🌗 npm 可信发布支持 CircleCI,npm 官网新增深色主题
- ✅ ESLint 10.2 支持 JS 最新的
TemporalAPI - ✅ Axios 1.15 支持 Deno / Bun,源码重构了
url.parse()
PS:本文附带甜妹解说的动画视频,粉丝请搜索哔哩哔哩@Web情报局。
🎉 每周热搜
🔗 Axios 主席疑遭朝鲜黑客“钓鱼“
Axios 是 GitHub 第一请求库,周下载量过亿。
不幸的是,愚人节前夕,Axios 突然发布了 2 个中毒版本,它们只坚挺了 3 小时就被封杀了,但至少波及几十万用户,这是近一年内最大规模的 npm 供应链攻击。
随后 Axios 团队主席爆料了攻击事件的完整事后分析,首先是它遭到了社会工程“钓鱼“,通过伪造的在线会议安装了有毒软件,导致 npm 账户被盗用。
![]()
Axios 源码本身没有 bug,黑客只添加了一个幽灵依赖 plain-crypto-js,其中包含了一个 postinstall 脚本,随后使用传统 npm token 发布中毒版本。
用户使用 npm install axios 之后,postinstall 脚本会自动执行,请求其他恶意软件,盗用系统资料。
![]()
之后,这个脚本会自尽,删除 postinstall 脚本,替换为正常 package.json,用户对这种“完美犯罪“浑然不知。
谷歌和微软深入调查了本次赛博攻击,部分证据表明攻击来自朝鲜的黑客组织,但可能很难像川普打伊朗那样直接证明。
![]()
总之,供应链攻击是一种系统性原罪。我们应该遵循 npm 发包的最佳实践,防止黑客轻易绕过了现代化的可信发布流程。
🛜 官方情报
🔗 Node bug 悬赏项目破产
2016 年,Node 加盟了 HackerOne 的 IBB(互联网 bug 悬赏)项目,通过众筹为 fix bug 的志愿者提供奖金。
Node 团队会继续接收 bug,但由于资金链中断,该悬赏项目现已暂停。
![]()
特别鸣谢一直以来为 Node 安全贡献的开发者和赞助商!Node 是 Web 开发的重要基建,如果你愿意提供赞助,请随时联系 OpenJS 基金会。
🔗 npm 可信发布支持 CircleCI
GitHub 官宣,npm 可信发布支持 CircleCI 作为 OIDC(OpenID 连接)供应商。
![]()
CircleCI 现在和 GitHub Actions 与 GitLab CI / CD 一样,维护者能从部署流程鉴权发包,无需长期 token。
此外,npm 官网上线深色主题了。
🔗 Oxlint / Oxfmt 兼容表
Oxc 官网新增了 Oxlint / Oxfmt 兼容表,可以直观地查看它们支持哪些 JS 框架和文件类型,从夯到拉分为四大梯队:
- 完整支持,比如 Oxlint + Oxfmt 完整支持 React 的代码质检和格式化
- 部分支持,比如 Oxlint 暂不支持 Vue 模板的代码质检
- 不支持,比如 Svelte 没有提供 Prettier 插件,Oxfmt 也不支持
- 越界功能,比如 Oxlint 不支持 CSS 代码质检
![]()
🚦 版本更新
🔗 ESLint 10.2
ESLint 是 GitHub 第一 JS Linter(代码质检工具),最近更新了 10.2 次版本。
首先,ESLint 新增了 meta.languages 属性,作者可以指定规则适用的语言,比如 JS 专属规则或 Markdown 专属规则等。
![]()
此外,ESLint 还支持 JS 最新的 Temporal 全局变量,no-undef 规则能识别 Temporal 而不会报警,no-obj-calls 规则会在直接调用 Temporal 时报警。
![]()
🔗 Axios 1.15
Axios 发布了 1.15 次版本,现在能支持 Bun / Deno。
Axios 还修复了代理处理和头部注入等安全漏洞,CI(持续集成)采用 OIDC 来守卫 npm 发布。
源码使用了原生 URL API,url.parse() 重构为 new URL()。
![]()
💡 前端信息差
🔗 CSS 新函数 contrast-color()
最近 npm 上线了深色主题,但还有一些无障碍 bug,比如切换深色主题后文字对比度不够,看不清楚。
![]()
Google 专家 Una 之前就提出了一个新的 CSS 函数 contrast-color(),它可以接受任意颜色,然后根据输入的颜色去计算对比度,最终返回 black 或 white。
![]()
contrast-color() 可以自动生成对比度更好的文字,完美解决 npm 的无障碍文字 bug。
CSS contrast-color() 函数目前已经达到 Baseline Newly Available(全新可用基线),所有新版的主流浏览器都支持这个功能喔。
![]()
🛠️ 工具推荐
为了对抗供应链攻击,本期我们主要分享一些 npm 防御式指南。
🔗 npm 可信发布
首先是 npm 官方文档出品的 trusted publishing(可信发布),它可以让 npm 和 GitHub CI(持续集成)完美搭配。
![]()
🔗 npmx 网站
再来是比 npm 更现代化的网站 npmx,npmx 会显示盾牌来说明这个 axios 版本是通过可信发布持续部署的。
你会发现 axios 的某些版本没有盾牌,说明 axios 没有严格使用可信发布,黑客就会从这里寻找机会。
![]()
npmx 不仅会警告你这个版本可信度降低,还会爆料模块的性能问题或安全漏洞,我知道你很急,但是你先别升级。
![]()
🔗 pnpm 供应链攻击
还有就是比 npm 更现代化的包管理器 pnpm,pnpm v10 的官网提供了缓解供应链攻击的完整指南。
![]()
这些配置在最新版的 pnpm 11 中会默认启用,所以提前了解也方便你之后升级到 pnpm 11。
🔗 npm 安全最佳实践
最后,Node 安全专家 Liran 也在 GitHub 上分享了一份《npm 安全最佳实践》,建议收藏。
![]()
🙏 特别鸣谢
以上就是本期《Web 周刊》的全部内容了,希望对你有所帮助。
👍 感谢大家按赞跟转发分享本文,你的手动支持是我坚持创作的不竭动力喔。
😘 已经关注我的粉丝们,我们下期再见啦,掰掰~~
![]()