SuperAPI AI 工具集

security-updates

安全与审计

查看项目

更新于 10-15 10:30

技能介绍

Security Updates for Drupal with Composer 是一个用于 Drupal 项目的安全更新技能,核心目标是在 Composer 管理的 Drupal 代码库中审计并修复已知安全漏洞。

【用途】 适用于以下场景:对 Drupal 项目运行安全审计;修复被 composer audit 标记的包;应用特定的安全公告;验证不再残留已知漏洞。

【使用前强制步骤:创建分支】 开始前必须创建并确认新分支,不得在 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 及公告链接。可用 composer audit --format=json 获得 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 audit --format=json 与 python3 解析的脚本命令;也可在审阅审计输出后手动更新,如 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。若本地有 Drush,运行 drush status 确认 Drupal bootstrap: Successful;若启动失败则不要提交,应先排查。

【审计通过后的流程】 依次询问用户:是否提交改动(若是,git add composer.json composer.lock 并 git commit -m "Apply Drupal security updates";若否,提醒 composer.json 和 composer.lock 尚未提交);是否部署到 Acquia 环境(若是,按 Drupal Update and Deploy 手册推送代码、切换环境、可选触发流水线构建);部署后运行 drush updb --yes 和 drush cr。

【故障排查】 遇到“Your requirements could not be resolved”时,可用 composer why drupal/package 查看依赖来源、composer why-not drupal/package 2.x 查看阻止更新的约束,若安全则放宽约束后重试。公告在更新后仍存在,可能是本地公告库陈旧,可执行 composer audit --update-cache 后再次审计。若无法在不破坏其他包的情况下更新,可临时固定冲突包并记录后续任务,先查看完整依赖树 composer depends drupal/conflicting-package,解决约束后再试。回滚不良更新时,可从版本控制恢复并重装:git checkout composer.json composer.lock 与 composer install;若更新已提交,则用 git revert HEAD 后 composer install。

【最佳实践】 每次部署前运行 composer audit;使用 --with-all-dependencies;审阅 composer.lock 差异,确认只有预期包变化;查看公告链接以理解漏洞后再更新。