mcpField
S
security-updates

security-updates

github.com/acquia安全10123 次安装今天更新
代码仓库

关于 security-updates

security-updates 是用于审计 Drupal 依赖并通过 Composer 修复安全问题的技能。它指导开发者创建分支、更新软件包、验证结果,并处理可选的提交或部署步骤。

主要功能

  1. 01审计 Composer 安全公告
  2. 02更新存在漏洞的软件包
  3. 03验证修复与 Drupal 启动
  4. 04排查依赖冲突
  5. 05回滚有问题的更新

适用场景

  1. 01部署前检查 Drupal 项目
  2. 02修复指定软件包安全公告
  3. 03确认已解决已知漏洞
  4. 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 环境吗?”

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

最佳实践

  1. 每次部署前运行 composer audit——尽早发现新的安全公告。
  2. 使用 --with-all-dependencies——安全修复通常需要更新传递依赖项。
  3. 检查 composer.lock 的差异——确认只有预期的软件包发生了更改。
  4. 查看安全公告链接——更新之前先了解漏洞的具体内容。

评论

支持 Markdown