只拷 vendor 目录无法通过合规审计,因缺失 packages.json、.zip 归档文件及 composer.lock 中完整 dist 字段,导致无法验证依赖来源、完整性与可重建性,违反等保三级、iso 27001 对可追溯、可验证、可重建的强制要求。

为什么只拷 vendor 目录无法通过合规审计
合规审计(如等保三级、ISO 27001)要求可追溯、可验证、可重建。只拷 vendor/ 目录缺失三类关键证据:packages.json(依赖拓扑元数据)、.zip 归档文件(含原始 dist.shasum 校验值)、composer.lock 中完整 dist 字段(含 URL、shasum、reference)。缺任一者,审计时无法证明“该包版本确系从指定源下载、未被篡改、无隐藏依赖”。
-
packages.json必须放在镜像根目录,且需包含所有间接依赖(例如monolog/monolog依赖psr/log,后者元数据也得存在) -
.zip文件名必须严格合规:monolog-monolog-3.5.0.zip合法;monolog/monolog-3.5.0.zip或monolog_monolog-3.5.0.zip会被 Composer 忽略 - 每个 ZIP 内容必须用
composer archive验证:其 SHA256 与composer.lock中对应dist.shasum完全一致
如何生成审计可用的离线镜像包
用 satis 构建静态镜像,而非手写脚本或改缓存路径——前者输出结构固定、字段完整、可人工校验;后者易漏子依赖、ZIP 命名错位、packages.json 缺字段。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在联网机执行:
php bin/satis build satis.json web/,其中satis.json显式列出顶层包(禁用"require-all": true) - 生成后检查
web/packages.json是否含"packages"和"providers"两层结构,且每个包有"dist"对象(含"url"、"shasum"、"type") - ZIP 文件必须全部位于
web/dist/下,且命名格式为{vendor}-{package}-{version}.zip(小写字母、短横线分隔) - 导出前运行
composer clear-cache,避免本地缓存污染镜像一致性
内网部署时如何让 Composer 严格按镜像执行
仅把镜像放好不等于合规——Composer 默认 fallback 行为会绕过配置偷偷联网,触发审计红线。必须显式切断所有回退路径。
- 项目
composer.json中写死仓库:"repositories": [{"type":"composer","url":"http://192.168.10.100"}],并加"packagist.org": false - 全局禁用 packagist:
composer config --global repo.packagist false(不是 unset,false 才强制跳过) - 执行前设环境变量:
COMPOSER_DISABLE_NETWORK=1(Linux/macOS:export COMPOSER_DISABLE_NETWORK=1) - 验证是否生效:
composer install -v 2>&1 | grep "Reading packages.json"应输出本地地址,不能出现repo.packagist.org
合规交付包里必须包含哪些文件
交付给内网团队的压缩包,不是“能跑就行”,而是要满足审计人员现场抽查:解压即验、路径可溯、哈希可对。
- 必须包含:
web/全目录(含packages.json、dist/*.zip)、composer.json(已配本地源)、composer.lock(dist 字段完整)、audit-report.txt(含每个 ZIP 的sha256sum与 lock 中shasum对照表) - 禁止包含:
vendor/目录(它不是源,是产物;审计要看构建过程,不是结果) - 交付前运行:
find web/dist -name "*.zip" -exec sha256sum {} \; > audit-report.txt,再人工比对是否与composer.lock中每项dist.shasum一致 - 镜像服务不用 Nginx/Apache——用
python3 -m http.server 8000即可,HTTP 服务本身不参与审计,只提供可访问性验证
audit-report.txt 的生成时机:它必须在 satis build 完成后立刻生成,且 ZIP 文件不能经任何 GUI 工具二次压缩(会改文件 inode 或权限,导致哈希不一致)。










