## GitHub Actions 的严重安全漏洞:缺乏基本的包管理 GitHub Actions 尽管被广泛用于 CI/CD,但从根本上缺乏像 npm、Cargo 或 NuGet 等成熟包管理器所具备的安全特性。关键在于,它**不使用锁定文件**,这意味着工作流依赖项会在每次运行时重新解析,导致不可预测且可能执行恶意代码。 研究表明,几乎所有用户都运行第三方 Actions,通常来自未经验证的创建者,并且有很大一部分用户运行已知存在安全漏洞的 Actions。可变版本标签进一步加剧了这一问题——即使固定到像 `@v4` 这样的版本,也不能保证代码的一致性,因为标签可能会被更新。 虽然 GitHub 已经引入了不可变发布和 SHA 固定等缓解措施,但这些措施仅解决了顶级依赖项,并且**忽略了传递依赖项**,这是一个主要的攻击向量。Actions 还缺乏完整性验证、依赖树可见性以及用于安全存储和扫描的中央注册表。 这种有缺陷的设计源于其在封闭的企业系统中的起源,并且其影响范围超出了 GitHub,影响了其他 CI 系统,甚至依赖 Actions 进行发布的包注册表。尽管多次请求,GitHub 仍然拒绝实施锁定文件系统,使用户容易受到供应链攻击。
为了避免携带多台笔记本电脑用于工作和个人用途,作者在其工作笔记本电脑上使用虚拟机(VM)。该虚拟机基于最小化的Ubuntu Server安装,并针对高效的个人使用进行了定制,令人惊讶的是,*没有*传统的窗口管理器。
相反,Emacs被用作唯一的桌面环境。一个简单的`.xinitrc`文件以全屏模式启动Emacs,利用其窗口管理能力和自定义选项。网页浏览主要在Emacs中使用基于文本的浏览器(如`w3m`)进行,在需要时可以通过`xdg-open`临时启动图形化浏览器。
作者还展示了一种快速启动和组织多个基于Emacs的应用程序(包括社交媒体和新闻源)的设置,并将其定制成一个工作区,可以通过键盘快捷键轻松恢复。这种方法在工作提供的环境中提供了一种轻量级、键盘驱动的个人计算体验。
## 拥堵时段谜题数据库:深度解析
该项目详细介绍了为滑动方块谜题“拥堵时段”创建完整数据库的过程。作者在最初玩过手机版游戏后,重新回到实体棋盘上,受到启发,开始了一段旅程,不仅要解决问题,还要*生成*和编录标准6x6棋盘上所有“有趣”的谜题配置。
该过程始于一个求解器,然后是一个使用模拟退火的谜题生成器。作者并不满意,旨在生成*所有*可能的谜题,最终得到一个包含超过250万个独特配置的数据库,并根据复杂程度进行筛选,避免琐碎的排列。 “有趣”谜题的关键标准包括防止堵塞的行/列,并确保每个棋子对解决方案至关重要。
该项目利用位棋盘来实现高效的状态表示,并采用规范状态枚举技术来避免冗余计算,最终在一台强大的iMac上耗时3小时,或在配备72个核心的云服务器上耗时17小时。 结果数据库可供下载,其中包含需要最多50步才能解决的谜题,为“拥堵时段”爱好者和研究人员提供了重要的资源。 代码是开源的,并且还有一个可在线游玩的版本。 这项工作展示了计算能力在经典谜题中的一个迷人应用,并推动了人们对“拥堵时段”复杂性的认知边界。