呜啦!日常碎碎念,偶尔掉落优质前端博文推荐、学习资源等
网页:https://tg.cosine.ren
本频道的搜索Bot 来辣 👉 @cosSearchBot
私聊直接发消息就可以搜索啦~
🔖tags
#优质博文 #资源推荐 #博客更新 #碎碎念 #项目更新 #手工 #书摘 #阮一峰的科技周刊 #新动态
图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
网页:https://tg.cosine.ren
本频道的搜索Bot 来辣 👉 @cosSearchBot
私聊直接发消息就可以搜索啦~
🔖tags
#优质博文 #资源推荐 #博客更新 #碎碎念 #项目更新 #手工 #书摘 #阮一峰的科技周刊 #新动态
图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
#优质博文 #chrome #webgl #性能优化 #浏览器 #新动态
Introducing Skia Graphite: Chrome's Rasterization Backend for the Future
author Claire Charron
Introducing Skia Graphite: Chrome's Rasterization Backend for the Future
AI 摘要:本文详细介绍了 Chrome 在 Apple Silicon Macs 上推出的 Skia 新光栅化后端 Graphite。Graphite 是一个面向未来的图形渲染技术,显著提升了 Chrome 在 Motionmark 1.3 测试中的表现,同时为未来的图形改进奠定了基础。通过支持现代图形 API(如 Metal、Vulkan 和 D3D12)、多线程设计以及深度测试等创新技术,Graphite 不仅提高了渲染性能,还优化了用户体验,减少了滚动卡顿和页面加载等待时间。
1. Skia 在 Chrome 中的历史:
• 介绍了 Skia 作为 Chrome 图形渲染核心的历史,从最初的性能问题到引入 GPU 加速后端 Ganesh。
• Ganesh 虽性能优异,但因其以 OpenGL 为中心的设计,难以充分利用现代图形 API 的优势,因此团队开发了 Graphite。
2. Graphite 的成果:
• 在 Macbook Pro M3 上,Motionmark 1.3 得分提升近 15%。
• 优化了真实世界指标,如交互到下一帧时间(INP)、最大内容绘制时间(LCP)、图形流畅度(掉帧百分比)以及 GPU 内存使用等。
3. Graphite 与 Ganesh 的区别:
• 现代图形 API:Graphite 利用 Chrome 的 WebGPU 实现 Dawn,支持 Metal、Vulkan 等现代 API,减少维护负担并提升多线程和 GPU 计算能力。
• 2D 深度测试:通过深度测试减少过度绘制(overdraw),优化不透明和半透明对象的渲染顺序,提升性能并降低移动设备功耗。
• 多线程设计:Graphite 的 API 支持多线程,利用独立记录器(Recorders)在多线程上生成记录(Recordings),减轻主线程负担,减少卡顿和延迟。
• 性能悬崖与管线编译:Graphite 减少渲染管线数量,避免因管线编译导致的卡顿,确保复杂内容与简单内容渲染效率一致。
4. 未来计划:
• 多线程光栅化:计划将光栅化任务分配到多线程,进一步提升性能。
• 减少简单内容的 GPU 内存:通过重新发布记录(Recordings)优化滚动,减少不必要的 GPU 内存分配。
• GPU 计算路径光栅化:探索 GPU 计算路径光栅化技术,提升视觉质量和性能,替代传统的 MSAA 和 CPU 光栅化。
author Claire Charron
#demo #前端 #css #动画 #设计
经典键盘的实现!很酷
https://fixupx.com/jh3yy/status/1943132402315886934
不过这个没给demo链接,只是给了思路和展示。
代码什么的可以看看这个类似的。
Twitter | Github
经典键盘的实现!很酷
jhey ʕ•ᴥ•ʔ (@jh3yy):keypad w/ CSS + <img> layers 🧑🍳
.key { mask: url(keycap.png); }
.key:active img { translate: 0 20%; }
use keycap images as a mask for the container that they translate in ✨
bonus: clip-path to clip the hit area + filter to style the keys 🤙
https://fixupx.com/jh3yy/status/1943132402315886934
不过这个没给demo链接,只是给了思路和展示。
代码什么的可以看看这个类似的。
Twitter | Github
#优质博文 #前端 #JavaScript #编码问题 #字符串处理
JavaScript string slice() considered harmful | Attio
author Attio 团队 James Mulholland
JavaScript string slice() considered harmful | Attio
AI 摘要:本文探讨了 JavaScript 中 string.slice() 方法在处理 Unicode 字符串时可能导致的问题,特别是在处理包含表情符号等复杂字符时会意外截断代码单元,导致数据传输和解码错误。通过一个实际案例(Attio 的 CSV 导入工具与 Google Spanner 数据库交互时出现的 gRPC 错误),作者深入分析了 JavaScript 字符串的 UTF-16 编码机制、代码点和代码单元的区别,以及如何使用更安全的方法(如基于代码点的迭代)来避免这类问题,最终提供了解决方案并修复了错误。
1. 引言:CSV 导入工具的背景与问题
• 讲述了 Attio 的 CSV 导入工具每月处理大量数据,数据来源多样且不可预测,容易遇到边缘情况。
• 发现了一个 gRPC 错误,涉及 Google Spanner 数据库,错误提示请求协议无效。
2. 问题复现与初步分析
• 通过日志查询和客户提供的 CSV 文件复现了问题。
• 在调试过程中,注意到一个字符串截断函数 truncateSortableValue ,使用 slice() 方法截断字符串。
• 发现当 slice() 截断到表情符号(如 🇬🇧)中间时,得到的是不完整的代码单元,导致后续错误。
3. 深入理解 JavaScript 字符串与 UTF-16 编码
• 介绍了 JavaScript 字符串基于 Unicode 和 UTF-16 编码,解释了代码点(code point)和代码单元(code unit)的概念。
• 指出 UTF-16 使用 16 位代码单元存储字符,常见字符占一个单元,复杂字符如表情符号可能占两个单元。
• 讨论了字形簇(grapheme cluster),如表情符号由多个代码点组合而成,截断时需特别注意。
• 强调 string.slice() 是基于代码单元操作,而非代码点,可能导致截断不完整字符,影响数据编码(如传输到数据库时的 UTF-8 编码问题)。
4. 问题根源:编码与解码失败
• 分析了将不完整代码单元编码为 UTF-8(如使用 Buffer.from 或 protobufjs)时,解码端无法正确还原字符串,导致错误。
• 虽然无法直接调试 Google Spanner 的闭源代码,但通过示例证明了这种编码失败是问题的根本原因。
5. 解决方案:基于代码点的安全截断
• 提出了使用 [Symbol.iterator]() 或扩展运算符来基于代码点而非代码单元进行字符串操作。
• 提供了一个新函数 safeHead(),安全地获取字符串前 n 个代码点,避免中途截断代码单元。
• 修改了原截断函数 truncateSortableValue,使用新方法解决问题,最终通过拉取请求修复了导入工具的错误。
author Attio 团队 James Mulholland
#优质帖子 #前端 #Node #工程化 #可扩展性 #DDD #模块化 #Nest
Best Scalable File Structure for unopinionated Node frameworks?
Best Scalable File Structure for unopinionated Node frameworks?
AI 摘要:本文讨论了在无特定意见的 Node.js 框架(如 Express、Hono 等)中,如何设计一个可扩展且适合生产环境的文件结构。作者和评论者围绕领域驱动设计(DDD)、模块化单体架构(Modular Monolith)以及文件结构对代码库可维护性的影响展开了激烈讨论。部分人认为文件结构对团队协作和代码库扩展至关重要,而另一些人则认为其重要性被夸大,强调不应过于纠结于目录布局。
#优质博文 #云计算 #数据成本
让我们谢谢成本侠!(x
Data Egress: What is it and how much does it cost?
author anthonynsimon
让我们谢谢成本侠!(x
Data Egress: What is it and how much does it cost?
AI 摘要:本文详细探讨了云计算中常常被忽视的一项成本——数据出口(Data Egress),即从云服务提供商的网络向公共互联网传输数据所产生的费用。文章列举了多家主流云服务提供商的免费额度和超出免费额度后每 1 TB 数据的出口费用,价格从免费到数百美元不等,旨在帮助用户了解并对比不同提供商的成本差异,强调了根据实际需求选择云服务的重要性。
1. 云服务提供商数据出口费用对比(AI 总结的,需在文中验证)
• 免费且无限制的提供商:包括 UpCloud、Runpod、Civo、Contabo、DataCrunch、Green AI Cloud、Hostinger、Hyperstack、Lambda Labs、OVHcloud、Paperspace、The Cloud Minders 和 Wasabi,用户使用这些服务无需担心数据出口成本。
• 部分免费的提供商:Cloudflare 和 Scaleway 提供大部分服务的免费出口流量,但具体取决于服务类型。
• 有免费额度但超额收费的提供商:
• Hetzner(1-60 TB 免费额度,超额 1 TB 收费 $1.17)
• Linode(1-20 TB 免费额度,超额 1 TB 收费 $5.00)
• Oracle Cloud(10 TB 免费额度,超额 1 TB 收费 $8.50)
• Backblaze、Bunny CDN、DigitalOcean、Entrywan、Vultr(免费额度不同,超额 1 TB 收费 $10.00)
• Nebius(100 GB 免费额度,超额 1 TB 收费 $15.00)
• Cloudways、Database Mart、Exoscale、Fly.io、Koyeb(免费额度不同,超额 1 TB 收费 $20.00)
• Railway(无免费额度,1 TB 收费 $50.00)
• Alibaba Cloud(10 GB 免费额度,1 TB 收费 $74.00)
• Microsoft Azure(100 GB 免费额度,1 TB 收费 $87.00)
• AWS(100 GB 免费额度,1 TB 收费 $90.00)
• Supabase(5-250 GB 免费额度,1 TB 收费 $90.00)
• Sevalla、Zeabur(100 GB 或 10-100 GB 免费额度,1 TB 收费 $100.00)
• Google Cloud(视服务而定,1 TB 收费 $120.00)
• Vercel(100 GB-1 TB 免费额度,1 TB 收费 $150.00)
• Render(100 GB-1 TB 免费额度,1 TB 收费 $300.00)
• Netlify(100 GB-1 TB 免费额度,1 TB 收费 $550.00)
• 价格说明:价格可能因地区和其他因素而异,文章以北弗吉尼亚(美国)或法兰克福(德国)地区为基准,并基于若干假设进行估算,建议用户查阅提供商的最新定价页面。
2. 理解云数据传出:介绍了数据传出作为云计算中常被忽视的成本,开发者在使用云服务时需关注此费用,因为大量数据传输可能导致费用快速增加。
3. 什么是数据传出:为数据离开云服务提供商网络到公共互联网的过程,可能包括用户下载数据或数据在不同云提供商之间的传输,通常按 GB 或 TB 计费。
4. 数据传出与传入的对比(Data Egress vs Ingress): 区分了数据传入(通常免费)和数据传出(通常收费)的概念,以文件上传和下载为例说明了两者的实际应用场景。
5. 为何云服务商对数据传出收费? - 解释了云服务商因基础设施和带宽成本而对数据传出收费的原因,同时指出收费也可能用于限制网络饱和或频繁的大量数据转移行为。
5. 降低数据传出成本的策略 - 提供了多种降低成本的方法,包括利用免费额度、使用内容分发网络(CDN)缓存静态资源、数据压缩、监控使用量、以及利用私有网络传输数据。
author anthonynsimon
#Newsletter #前端 #node #tools
Node Weekly Issue #585
author Node Weekly Team
Node Weekly Issue #585
AI 摘要: 本期 Node Weekly(#585,2025年7月8日)涵盖了 Node.js 生态系统的最新工具、教程和资讯,重点介绍了处理无效 JSON 数据的工具 jsonrepair、修复 Node 中 emoji 切片问题的技术、以及多个实用工具和框架如 Bruno 和 grammY。此外,还包括 Node.js 官方 API 文档设计改进的进展、AI 驱动的颜色搜索引擎开发教程,以及 JavaScript 生态系统中的其他动态,如 Deno 2.4 发布和 Rust 在 JS 工具链中的应用趋势。
1. 核心内容与工具
• jsonrepair: 介绍了一个修复无效 JSON 文档的工具,适用于处理 LLM 或不合规软件输出的异常 JSON,可通过 Node、CLI 或在线版本使用。
• Codepoint–Safe Truncation: 针对 Node 中 CSV 导入因 emoji 导致的错误,James Mulholland 展示了如何通过代码点感知的 spread 方法解决切片问题。
• Bruno: 一个基于 Node 和 Electron 的开源 HTTP API 测试 IDE,作为 Postman 的轻量级替代品,支持复杂和简单的请求测试。
• Poolifier 5.0: 实现 worker_threads 和 cluster 的工作池,支持可中止任务。
• grammY: 一个最新的 Telegram 机器人框架,简化机器人开发,支持最新的 Telegram Bot API。 【这个好用的喵】
• 0x 6.0: 一款单命令生成 Node 进程交互式火焰图的性能分析工具。
• 其他工具更新:包括 Babel 7.28.0(支持原生 TS 配置和 ES2026 资源管理)、Inquirer.js 12.7(命令行交互 UI)、Secretlint 10.2(防止凭据泄露)、Faker 9.9(生成伪造数据)等。
2. 教程与资源
• What’s the Difference Between Ordinary Functions and Arrow Functions?: James Sinclair 探讨普通函数与箭头函数的区别。
• Am I Online?: Anton Zhiyanov 介绍一种通过检查特定 Google URL 判断应用是否在线的方法。
3. Node.js 社区动态:
• API 文档改进:Node.js 团队正在通过 api-docs-tooling 工具重塑 API 文档的设计和构建流程,并分享了初步进展。
• 数据出口成本比较:对比了 Vercel、AWS 等约 40 个流行云服务的数据出口费用。
• Node 应用文件结构讨论:Reddit 的 /r/node 社区就 Node 应用文件结构展开了有趣讨论。
4. JavaScript 生态系统其他资讯:
• Rust 在 JS 工具中的应用:Oliver Stenbom 讨论 JavaScript 工具链逐渐被 Rust 重写的趋势。 【锈化!】
author Node Weekly Team
#碎碎念 #前端
https://fixupx.com/yuxiyou/status/1941079033049162012
草,等一下,难道说这个是早有预兆。
那确实是很心情复杂了。
https://fixupx.com/yuxiyou/status/1941079033049162012
草,等一下,难道说这个是早有预兆。
那确实是很心情复杂了。
尤雨溪 (@yuxiyou):人生第一笔一级市场投资退出,基本没赚钱,心情有点复杂
没亏钱我很满意,当时本来就没准备能拿回来。心情复杂的原因估计过段时间了解前端生态的人就明白了
#碎碎念 #前端 #新动态
吃完烤肉回来看到,虽然大家都知道了但是还是发一哈。
是的是的, vercel 收购了 NuxtLab 喵。(fixed)
https://fixupx.com/vercel/status/1942575687761813910
https://vercel.com/blog/nuxtlabs-joins-vercel
吃完烤肉回来看到,虽然大家都知道了但是还是发一哈。
是的是的, vercel 收购了 NuxtLab 喵。(fixed)
https://fixupx.com/vercel/status/1942575687761813910
NuxtLabs, creators of Nuxt and Nitro, are joining Vercel.
Same license, roadmap, and open governance, but now in a joint mission to build the best web.
https://vercel.com/blog/nuxtlabs-joins-vercel
#优质博文 #前端 #设计还原 #css #设计 #兼容性
讲究,太讲究了www
Matching drop shadows across CSS, Android, iOS, Figma, and Sketch
author Bjango Team
讲究,太讲究了www
Matching drop shadows across CSS, Android, iOS, Figma, and Sketch
AI 摘要:本文详细探讨了在 CSS、Android、iOS、Figma 和 Sketch 等多个平台和设计工具中实现一致的阴影效果(drop shadow)的问题。作者通过对比不同平台的阴影渲染差异,指出模糊半径(blur radius)的处理方式是导致不一致的主要原因,并提供了具体的缩放因子(scale factors)来调整模糊半径,以实现跨平台的视觉一致性。文章还深入分析了各平台的渲染机制和技术细节,为设计师和开发者提供了实用的转换公式和指导。
1. 引言与问题背景
• 介绍了跨平台阴影效果不一致的问题,通过图片对比展示了 CSS、Android 和 iOS 渲染相同阴影参数时的差异(例如 Y 偏移 24px,模糊半径 24px 的阴影在各平台呈现不同)。
• 指出 Android 使用 setShadowLayer 而非 Material elevation,CSS 和 Android 阴影虽接近但仍有细微差异(Android 更模糊)。
2. 浏览器间的阴影一致性
• 讨论了 CSS 阴影在不同浏览器(Safari、Firefox、Chrome)中的表现,发现 box-shadow 在这些浏览器中渲染效果基本一致,截图以 Safari 为主。
3. 设计工具与 CSS 的对比
• 指出 CSS、Sketch 和 Figma 的阴影效果一致,但背景模糊(background blur)不在本文讨论范围内,仅聚焦于阴影效果。
4. 模糊半径的差异分析
• 阴影的参数中,位置偏移和颜色在各平台表现一致,唯独模糊半径的处理方式不同。
• 作者通过重新排列模糊测试结果,发现模糊半径存在 1×、2× 和 3× 的缩放模式,阴影主要集中在 1× 和 2× 范围内。
5. 缩放因子与技术细节
• 解释了 CSS 规范中模糊半径的标准差为模糊半径的一半,而 iOS 的模糊半径是 CSS 的两倍,因此 CSS 到 iOS 的缩放因子为 0.5×。
• Android 使用 Skia 渲染,模糊半径缩放涉及 1 / sqrt(3) 的因子,与 CSS 不完全一致(部分原因是早期 Safari 的影响)。
• 提供了详细的缩放因子表格,用于在 CSS、Sketch、Figma、Android 和 iOS 之间转换模糊半径,例如 CSS 到 Android 为 0.866×,iOS 到 CSS 为 2.0×。
• 通过调整后的对比图和色调分离(posterising)结果,展示了缩放后的阴影效果非常接近,尽管由于渲染方法和代码差异无法完全一致。
6. 应用与结论
• 研究目的是为 Pinwheel 工具导出 Android 和 iOS 阴影代码时提供正确的缩放因子,确保跨平台一致性。
• 总结了实现近似一致阴影的可行性,并感谢 Kit Grose 在审稿中提供的 Skia 代码注释支持。
author Bjango Team
#Newsletter #前端 #动画 #css #tools #新特性
Smashing Newsletter #514: New CSS Techniques
author Cosima Mielke (cm), Vitaly Friedman (vf), and Iris Lješnjanin (il)
Smashing Newsletter #514: New CSS Techniques
AI 摘要: 本期 Smashing Newsletter #514 聚焦于 CSS 的最新技术和工具,介绍了多项创新功能和实用资源,包括 CSS 中的 if() 函数、锚点定位 API、缓动函数工具、阴影匹配技巧以及 CSS 渐变效果等。
1. CSS 新特性(Chrome 137):
• 介绍了 if() 函数,支持基于自定义属性值和样式查询编写逻辑样式,增强了 CSS 的逻辑控制能力。
• reading-flow 属性通过声明预期的焦点顺序提升键盘和屏幕阅读器的可访问性,解决视觉顺序与 DOM 源顺序不匹配的问题。
2. CSS 径向渐变创建 CSS 爆炸背景效果
• Chris Coyier 展示了如何仅用 CSS 创建爆发背景效果,利用 conic-gradient() 和硬性停止点的特性,结合径向渐变实现文本空间和视觉层次。
3. CSS 缓动函数工具(Easing Wizard)
• Matthias Martin 开发的 Easing Wizard 工具帮助开发者可视化和测试 CSS 缓动函数,支持多种类型(如 Bézier、弹簧、反弹等),并提供预设和代码导出功能。
4. 跨平台阴影匹配
• Marc Edwards 提供了一份阴影转换比例表,帮助开发者在 CSS、Android、iOS、Figma 和 Sketch 等平台间实现一致的阴影效果,尽管渲染差异无法完全消除,但可接近匹配。
5. CSS 锚点定位 API 工具
• Una Kravets 开发的 Anchor Position Tool 简化了锚点定位 API 的使用,通过可视化界面展示元素相对锚点的定位效果,并生成可直接使用的 CSS 代码。
6. HTML 输入图标样式修复
• Cassidy Williams 分享了一个解决暗模式下日期/时间输入图标不可见的技巧,利用 ::-webkit-calendar-picker-indicator 伪元素调整图标样式,支持滤镜、不透明度和自定义图像。
author Cosima Mielke (cm), Vitaly Friedman (vf), and Iris Lješnjanin (il)
#Newsletter #前端 #css #svg #新特性
Web Weekly #162
author Stefan Judis
Web Weekly #162
AI 摘要:本文内容涵盖了前端开发的最新动态、技术技巧和资源分享。文章重点介绍了 CSS 自定义高亮 API、表单控件样式的未来改进、ARIA 辅助技术的使用、TypeScript 的 satisfies 关键字、SVG 滤镜效果等多个技术话题。此外,还分享了有趣的项目、工具以及作者对代码注释和工作恐惧的思考,旨在为读者提供有价值的行业资讯和学习资源。
author Stefan Judis
#优质博文 #前端 #css #course #新特性
Better CSS Shapes Using shape() — Part 4: Close and Move
author Temani Afif
Better CSS Shapes Using shape() — Part 4: Close and Move
AI 摘要:本文是关于 CSS shape() 函数系列的第四篇文章,重点介绍了两个较少使用但非常实用的命令:close 和 move 。作者详细解释了 close 命令如何用于闭合形状,以及在特定情况下如何优化代码;同时,move 命令被用于在单一 shape() 定义中创建多个不连续的形状部分,极大地扩展了设计可能性。通过具体的代码示例和应用场景(如切出形状和重复形状),文章展示了如何利用这两个命令实现复杂的 CSS 形状设计。
author Temani Afif
#优质博文 #svg #react #motion #动画 #css #demo #course
How to Create a Gooey Search Interaction with Framer Motion and React
author Oguzhan Tufenk
How to Create a Gooey Search Interaction with Framer Motion and React
AI 摘要:本文详细介绍了如何使用 Framer Motion 和 React 创建一个带有 Gooey 效果的搜索交互组件。作者受到动态岛动画的启发,将 Gooey 效果应用于搜索栏,打造了一个小型但有趣的交互体验。教程涵盖了 Gooey 效果的实现、SVG 滤镜的应用、Framer Motion 的集成、搜索状态管理、动画效果的优化以及针对 Safari 浏览器的兼容性处理,旨在激发开发者创意并提供实用指导。
1. Gooey 效果的创建:
• 介绍了 Gooey 效果的起源,基于 Lucas Bebber 的文章 The Gooey Effect。
• 通过调整 SVG 滤镜中颜色矩阵的 alpha 通道值,实现自定义的 Gooey 效果。
• 提供了具体的代码示例,展示了如何使用 feGaussianBlur 和 feColorMatrix 创建滤镜效果。
2. 应用 Gooey 效果:
• 在主组件中通过 CSS 将 SVG 滤镜应用到父元素上。
• 提供了简单的代码结构,展示滤镜如何与 DOM 元素结合。
3. Framer Motion 集成:
• 使用 Framer Motion 为搜索栏添加动态动画效果,定义了四种状态(初始状态、搜索激活、搜索结果、加载中)来管理交互逻辑。
• 使用 AnimatePresence 组件实现搜索结果的集体展示和个体动画效果。
• 详细解释了 getResultItemVariants 和 getResultItemTransition 函数,用于控制搜索结果项的动画效果(如缩放、位移、模糊效果)。
• 动画设计注重细节,例如通过索引计算延迟实现顺序动画,并使用弹簧动画(spring)增加流畅性。
4. Safari 兼容性挑战:
• 提到 WebKit 对 SVG 滤镜的限制,作者通过 isUnsupported 布尔值对 Safari 浏览器进行了动画调整。
• 强调了兼容性问题的长期存在,并提供了针对性的解决方案。
author Oguzhan Tufenk
#优质博文 #GitHub #安全
各方面意义上的直呼 NB。
Guest Post: How I Scanned all of GitHub’s “Oops Commits” for Leaked Secrets
author Sharon Brizinov
各方面意义上的直呼 NB。
Guest Post: How I Scanned all of GitHub’s “Oops Commits” for Leaked Secrets
AI 摘要:本文由白帽黑客 Sharon Brizinov 撰写,详细描述了他如何通过 GitHub Archive 和 GitHub Event API 扫描自 2020 年以来所有公开的“Oops Commits”(即被开发者通过强制推送删除的提交)以寻找泄露的秘密信息。他发现了价值 25,000 美元的漏洞赏金,并与 Truffle Security 合作开源了一款工具 Force Push Scanner,用于帮助组织检测隐藏的提交中的秘密。文章深入探讨了 GitHub 如何永久存储被删除的提交、如何利用 API 和自动化工具发现这些提交中的敏感信息,以及如何通过手动和 AI 辅助的方式筛选出高价值的秘密。
1. 背景介绍
• Sharon Brizinov 是一位专注于 OT/IoT 设备漏洞研究的白帽黑客,偶尔参与漏洞赏金狩猎。
• 此前发表过关于 GitHub 仓库中隐藏秘密的文章,与 Truffle Security CEO Dylan 交流后,决定进一步探索大规模秘密狩猎的新方法。
• 使用 GitHub Event API 和 GH Archive 项目,专注于扫描“零提交推送事件”(即被删除的提交)以发现秘密。
2. 什么是删除提交?
• 解释了开发者通过 git reset 和 git push --force 删除提交的过程,目的是隐藏误提交的敏感信息。
• 指出即使提交被删除,GitHub 仍会永久存储这些“悬挂提交”(dangling commits),通过提交哈希值即可访问。
• 通过示例展示了如何在自己的仓库中模拟删除提交,并证明即使本地看不到,GitHub 依然保留记录。
• 探讨了 GitHub 保留这些提交的原因,可能是为了支持拉取请求、分支、审计等功能。
3. GitHub Event API 的作用
• 介绍了 GitHub Event API,用于获取 GitHub 上的各种事件数据(如推送代码、创建仓库等)。
• 结合 GH Archive 项目(一个开源的 GitHub 事件归档服务),可以访问历史事件数据,避免手动猜测提交哈希。
• 通过筛选“零提交推送事件”(PushEvent Zero-Commit),快速定位被删除的提交。
4. 自动化构建
• 描述了如何通过自动化工具扫描 GH Archive 数据,提取“Oops Commits”,并使用 TruffleHog 扫描其中的秘密。
• 与 Truffle Security 合作开源了 Force Push Scanner 工具,支持组织或用户扫描自己的“Oops Commits”。
• 强调工具的道德使用,仅用于帮助团队评估潜在风险。
5. 寻找高影响力的秘密
• 扫描自 2020 年以来的数据,发现了数千个活跃的秘密。
• 通过手动搜索(过滤公司邮箱相关提交)、自定义工具(vibe-coded 平台用于分类和可视化)和 AI 辅助分析,筛选出高价值秘密。
• 数据显示:MongoDB 秘密泄露最多,但 GitHub PAT 和 AWS 凭据最具价值;.env 文件是泄露最频繁的文件类型。
6. 案例研究:阻止供应链攻击
• 发现了一个开发者泄露的 GitHub PAT,具有对 Istio 项目(一个开源服务网格,拥有 36k 星标)的管理员权限。
• 该权限可能导致大规模供应链攻击,如修改代码、创建发布或删除项目。
• 通过 Istio 的漏洞报告页面及时报告,团队迅速撤销了 PAT,阻止了潜在风险。
7. 总结与反思
• 项目成功发现了大量秘密,Sharon 通过漏洞赏金获得约 25,000 美元。
• 强调“删除提交并不安全”的观念,一旦秘密被提交,应视为已泄露并立即撤销。
• 开源工具和研究成果旨在帮助社区提高安全意识和防护能力。
author Sharon Brizinov
#新动态 #前端 #javascript
JavaScript Weekly #743
author Peter Cooper
JavaScript Weekly #743
AI 摘要:本期 JavaScript Weekly(#743,2025年7月4日)内容涵盖了 JavaScript 生态系统的最新动态,包括 Deno 2.4 的重大更新、ECMAScript 2025 新特性解析、以及多个工具和库的发布。尽管受到热浪和假期的影响,内容略显精简,但仍包含了丰富的文章、工具和行业新闻,适合对 JavaScript 及相关技术感兴趣的开发者深入了解最新趋势和技术进展。
1. 技术更新
• Deno 2.4 更新:重新引入 deno bundle 命令,支持服务器和客户端单文件打包,兼容 npm 和 JSR 依赖,具备自动树摇功能;新增 import 导入任意文件功能,OpenTelemetry 支持稳定,标志着一次重要的版本更新。
• Bun v1.2.18 发布:作为 Deno 的竞争者,Bun 也推出了新版本,具体细节未展开,但值得关注。
• ECMAScript 2025 新特性:Paweł Grzybek 提供了以示例为主的视角,介绍 ES2025 的新特性,与之前 Dr. Axel 的解读形成补充。
• 其他工具发布:包括 Rspack 1.4(基于 Rust 的快速打包工具,支持 WebAssembly)、Electron 37.0、ESLint 9.30.0/9.30.1、Astro 5.11、Babel 7.28.0 和 Three.js r178 等。
2. 行业简讯
• JavaScript 商标纠纷:Ryan Dahl 更新了与 Oracle 关于 JavaScript™ 商标的纠纷进展,Oracle 有一个月时间回应 Deno 的取消请愿。
• JS1024 代码高尔夫比赛:一项年度 JavaScript 代码高尔夫比赛,主题为“Creepy”,参赛者需在 1024 字节内完成程序,截止日期为 7 月 19 日。
• 微软开源:GitHub Copilot Chat 扩展在 VS Code 上开源,展示微软扩展开发方式。
3. 文章与教程
• 如何构建 AI 驱动的颜色搜索引擎:Lúí Smyth 介绍如何结合多种技术打造 AI 驱动的颜色建议工具,技术应用具有广泛实用性。 #AI #color
• 轻量级响应式状态管理:Loren Stewart 探讨使用 JavaScript 原生代理(Proxies)构建响应式状态管理系统,避免依赖外部库。
• Next.js 全栈开发:Robin Wieruch 指导如何使用 Next.js 15 和 React 19 进行全栈开发,适合希望扩展技能的前端开发者。
• JavaScript 解析谜题:Hillel Wayne 分享一个简单的 14 字符 JS 问题,挑战开发者解析能力,是今年最受欢迎的内容之一。
• 2025 Node.js 模式:Ashwin 反思 Node.js 当前潜力,涵盖 ES 模块、内置 Web API、测试运行器等新特性。
• 其他专题:包括通过超声波传输数据(Lorenz Diener)、React 信号知识(Ryan Carniato)、Mapbox 3D 模型指南(Mykola Chernyshevskyi)、JSDoc 优化开发流程(Jordan Booker)。
4. 代码与工具
• Milkdown:一个插件驱动的 WYSIWYG Markdown 编辑器框架,支持高度定制化。
• Repomix 1.0:将代码库打包为 AI 友好格式,适合用 LLM 分析代码。
• snapDOM 1.8:快速准确地将 DOM 节点捕获为 SVG 图像,保留样式和字体。 【这个看着挺不错的 相比 html2canvas 等】
• Time Picker:基于 shadcn/ui 的日期时间选择组件,简洁优雅。
• 其他工具:包括 Protobuf-ES 2.6、React Chessboard 5.0、Faker 9.9、Pixi.js 8.11 等。
5. 其他生态系统动态
• Patreon 国际化重构:涉及超 10,000 个 JavaScript 调用点的国际化重构故事。
• Cloudflare Containers:Cloudflare 推出新容器服务,扩展 Workers 功能。
• One Million Chessboards:在线 1000x1000 棋盘项目的工程和扩展故事。
• GitHub 漏洞赏金:Sharon Brizinov 分享通过追踪 GitHub 强制推送的提交发现价值 25k 美元的秘密。
• PlanetScale 进军 Postgres:MySQL 云服务提供商进入 Postgres 领域,处于私有预览阶段。
• Strudel:浏览器内编码音乐的工具,提供实时示例。
author Peter Cooper