关于 security-updates
security-updates 是用于审计 Drupal 依赖并通过 Composer 修复安全问题的技能。它指导开发者创建分支、更新软件包、验证结果,并处理可选的提交或部署步骤。
主要功能
- 01审计 Composer 安全公告
- 02更新存在漏洞的软件包
- 03验证修复与 Drupal 启动
- 04排查依赖冲突
- 05回滚有问题的更新
适用场景
- 01部署前检查 Drupal 项目
- 02修复指定软件包安全公告
- 03确认已解决已知漏洞
- 04恢复引发回归的更新
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ acquia/ acquia-skills --skill security-updates安装后在 Claude Code 中输入/security-updates确认已加载。
详细介绍
使用 Composer 更新 Drupal 安全问题
适用场景:
- 对 Drupal 项目执行安全审计
- 修复
composer audit标记的软件包 - 应用特定的安全公告
- 确认不存在已知漏洞
开始之前——创建分支
此步骤为必需步骤。创建并确认新分支之前,不要运行任何 composer 命令。 切勿直接在
main或master上更新软件包。
先检查当前分支:
git branch --show-current
如果用户当前位于 main、master 或任何受保护分支,请停止并询问:“这些安全修复的新分支要命名为什么?”
如果用户不确定,可以建议一个默认名称(例如,security/drupal-updates-YYYY-MM-DD)。
git checkout -b <branch-name>
继续之前,确认新分支已激活:
git branch --show-current
只有在输出确认当前分支不是受保护分支后,才继续下一步。
审计漏洞
composer audit
输出会列出存在已知安全公告的软件包、CVE ID 以及安全公告链接。
JSON 输出(用于脚本编写)
composer audit --format=json
不包括开发依赖项的审计
composer audit --no-dev
修复特定的易受攻击软件包
composer update drupal/package --with-all-dependencies
使用 --with-all-dependencies,允许更新所需的传递依赖项版本。
示例——修复 drupal/core 中的已知安全公告
composer update drupal/core-recommended drupal/core-composer-scaffold --with-all-dependencies
修复所有存在安全公告的软件包
仅更新审计标记的软件包,并遵守 composer.json 中的版本约束:
composer update --with-all-dependencies $(composer audit --format=json 2>/dev/null \
| python3 -c "import sys,json; data=json.load(sys.stdin); print(' '.join(set(a['packageName'] for a in data.get('advisories', {}).values() if isinstance(a, dict)) or [v[0]['packageName'] for v in data.get('advisories', {}).values()]))" 2>/dev/null)
或者,查看审计输出后手动更新:
# List vulnerable packages from audit output, then update each
composer update drupal/package1 drupal/package2 --with-all-dependencies
确认不存在漏洞
composer audit
所有修复完成后的预期输出:
No security vulnerability advisories found.
确认已安装更新后的版本
composer show drupal/package | grep versions
检查已安装的版本是否与预期的修复版本一致。对于 Drupal 核心:
composer show drupal/core | grep versions
确认 Drupal 仍可正常引导
如果本地有 Drush:
drush status
预期结果:Drupal bootstrap: Successful。如果引导失败,不要提交——请先调查问题再继续。
审计通过后,务必按顺序向用户询问以下问题:
1. “你要提交这些更改吗?”
- 如果是:
git add composer.json composer.lock git commit -m "Apply Drupal security updates"- 如果否 → 继续之前,提醒用户
composer.json和composer.lock尚未提交。2. “你要将这些更改部署到 Acquia 环境吗?”
- 如果是 → 按照 Drupal 更新和部署操作手册 推送代码、切换环境,并可选择触发流水线构建。
- 如果否 → 完成。
3. 部署后: 将工作标记为完成之前,先在目标环境运行数据库更新:
drush updb --yes drush cr
故障排除
“无法解析你的需求”
修复安全公告所需的版本与另一项约束冲突。可选方案:
# Check what requires the package
composer why drupal/package
# Check what prevents the update
composer why-not drupal/package 2.x
# Relax the constraint in composer.json if safe, then retry
composer update drupal/package --with-all-dependencies
更新后安全公告仍然存在
Composer 的本地安全公告数据库可能已过期。刷新它:
composer audit --update-cache
composer audit
更新软件包会导致其他软件包无法正常工作
暂时锁定冲突的软件包,并提交后续处理事项:
# Check the full dependency tree
composer depends drupal/conflicting-package
重试之前,请先在 composer.json 中解决该约束。
回滚错误的更新
如果更新引入了回归问题,请从版本控制中恢复之前的状态并重新安装:
git checkout composer.json composer.lock
composer install
如果更新已经提交,请还原该提交:
git revert HEAD
composer install
最佳实践
- 每次部署前运行
composer audit——尽早发现新的安全公告。 - 使用
--with-all-dependencies——安全修复通常需要更新传递依赖项。 - 检查
composer.lock的差异——确认只有预期的软件包发生了更改。 - 查看安全公告链接——更新之前先了解漏洞的具体内容。