关于 sap-dependency-security
此 Skill 为主流包管理器提供依赖安全和升级规划指导,并针对 SAP 项目、工具及 MCP 服务提供专门建议。内容涵盖供应链防护、兼容性、分阶段升级和测试。
主要功能
- 01包管理器安全指导
- 02冷却期和脚本策略
- 03锁文件验证与冻结安装
- 04SAP MCP 固定版本指导
- 05增量升级规划
适用场景
- 01强化软件包安装流程
- 02审查 SAP MCP 版本和来源
- 03规划经过测试的依赖升级
MCP 相关
它将 MCP 服务视为可执行依赖,指导使用精确的软件包版本或源代码提交固定版本、审查连接租户的工具,并验证 MCP 配置变更。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ secondsky/ sap-skills --skill sap-dependency-security安装后在 Claude Code 中输入/sap-dependency-security确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdagents/openai.yamlreferences/compatibility-matrix.mdcooldown-config-guide.mdpackage-manager-security.mdsap-dependency-risk-matrix.mdsap-mcp-inventory.jsonsap-mcp-security.mdsecrets-and-containers.mdsocket-cli-guide.mdstaged-upgrades.mdsupply-chain-security.mdtesting-strategy.mdscripts/generate-dependency-upgrades.shtemplates/abap-gcts-review.tmplbtp-cf-mbt-review.tmplbunfig-security.tmplcontainer-trivy.tmpldependabot-security.tmpldevcontainer-security.tmplgradle-security.tmplmaven-security.tmplnpmrc-security.tmplpnpm-workspace-security.tmplpython-security.tmplrenovate-security.tmplsap-mcp-config.tmplsocket-fix-ci.tmplsocket-scan-ci.tmplyarnrc-security.tmpl详细介绍
SAP 依赖安全
相关技能
- sap-hana-cli:用于依赖感知型数据库工具工作流和升级指导
- sap-cap-capire:用于 CAP 依赖安全的运行时和服务配置指导
- sap-fiori-tools:当工具涉及前端包时,用于安全的 UI5/Fiori 依赖策略
- sapui5:用于 SAPUI5/OpenUI5 前端依赖和 MCP 工具审查
- sap-datasphere:用于连接租户的 Datasphere MCP 和 CLI 依赖审查
- sap-sac-scripting:用于固定源码版本的 SAC MCP 设置和本地安装记录
通过供应链保护、兼容性分析、分阶段推出和全面测试,管理 SAP 依赖安全与升级,涵盖所有主要包管理器。
何时使用此技能
- 升级主要框架或库的版本
- 配置供应链攻击防护(冷却期、阻止脚本、加固锁文件)
- 设置安全的包管理器配置
- 解决依赖冲突或对等依赖问题
- 规划渐进式升级路径并进行测试
- 使用 Renovate、Dependabot 或 Snyk 自动执行依赖更新
- 审计依赖项是否存在漏洞
- 设置 CI/CD 依赖安全工作流
- 在
.mcp.json中固定或审查 SAP MCP 服务 - 审查 SAP CAP、UI5/Fiori、HANA、Datasphere、SAC、SAP Cloud SDK、BTP/CF/mbt 或 ABAP/gCTS 依赖工作流
常见问题
| 问题 | 建议的应对措施 |
|---|---|
.mcp.json 中的 MCP 包使用浮动版本或 @latest | 替换为精确版本或经批准的源码提交,并运行 npm run validate:mcp-security。 |
| 锁文件意外发生更改 | 检查包管理器配置,阻止生命周期脚本,并仅在明确依赖变更意图后重新生成锁文件。 |
| 依赖项版本过新,不符合冷却期策略 | 暂缓升级,除非有记录在案的安全例外情况,足以证明应立即采用该版本。 |
| 连接租户的工具更改了源码 | 使用凭据前,验证源码 URL、提交和构建步骤。 |
两种运行模式
交互模式 — 通过设置问题生成量身定制的配置。适用于全新设置。
默认模式 — 立即应用建议的默认值:7 天冷却期、阻止所有脚本、冻结锁文件、锁文件检查,以及启用冷却期的 Dependabot。可选择自定义。
SAP 开发模式 — 采用更严格的 SAP 安全策略:14 天冷却期、为 MCP 服务和可执行工具指定精确版本、禁止使用浮动的 @latest、为本地 MCP 服务固定源码提交,并手动审查连接租户的工具。
SAP 开发模式
当依赖项工作涉及 SAP 项目、SAP BTP 部署工具、SAP SDK 或此仓库提供的任何 MCP 服务时,请使用 SAP 开发模式。
核心规则:
- SAP 企业项目默认采用 14 天冷却期。请在 SAP MCP 清单或项目审查备注中记录明确的例外情况。
- 将 MCP 服务视为可执行依赖项。在
.mcp.json中使用精确的 npm 版本,例如@ui5/[email protected],切勿使用@latest或不带版本号的包名。 - 按提交固定本地源码 MCP。SAC 使用受信任的
secondsky/sap_analytics_cloud_mcp分支,并且必须记录提交2020235505d98111c2889598ab2217c1619b6943。 - 将运行时授权分开处理。此技能涵盖包、源码和可执行文件的信任;租户角色设计和业务授权请使用相关 SAP 技能。
- 在任何
.mcp.json或 SAP MCP 清单变更后,通过npm run validate:mcp-security验证 MCP 漂移。
加载 references/sap-dependency-risk-matrix.md 以了解 SAP 技术栈覆盖范围,并加载 references/sap-mcp-security.md 以了解 MCP 更新工作流和 SAC 源码安装策略。使用 references/sap-mcp-inventory.json 作为机器可读的已批准 MCP 包/源码列表。
交互式设置流程
当用户需要量身定制的配置时,请引导其完成以下决策。如果使用默认模式,请完全跳过本节。
第 1 层:必选决策
生成任何配置前,始终先询问以下 3 个问题:
1. 包管理器
“此项目使用哪个包管理器?”
| 答案 | 生成内容 |
|---|---|
| npm | .npmrc |
| Bun | bunfig.toml |
| pnpm | pnpm-workspace.yaml |
| Yarn | .yarnrc.yml |
| Deno | deno.json 配置 |
2. 冷却期
“新发布的包应经过多少天后才能安装?这可以防止供应链攻击:恶意包可能在几天内被发现并撤下。”
| 选项 | 天数 | 适用场景 |
|---|---|---|
| 激进 | 3 | 可发现大多数拼写仿冒包 |
| 推荐 | 7 | 适用于大多数项目的良好平衡 |
| 保守 | 14 | 关键系统/生产系统 |
| 极度谨慎 | 21 | 与 Snyk 内置默认值一致 |
| 自定义 | N | 由用户指定 |
3. 安装后脚本策略
“应如何处理生命周期脚本(postinstall、preinstall)?这些是供应链攻击的首要攻击途径。”
| 选项 | 行为 |
|---|---|
| 全部阻止(推荐) | --ignore-scripts + allow-git=none |
| 允许列表 | 默认阻止,允许特定的可信包 |
| 仅审核 | 发出警告,但不阻止 |
第 2 层:安全工具(作为一组提供)
“你想配置以下哪些安全功能?请选择所有适用项。”
4. CI/CD 自动化工具
| 答案 | 生成内容 |
|---|---|
| Dependabot | 含冷却期的 .github/dependabot.yml |
| Renovate | 含 minimumReleaseAge 的 renovate.json |
| Snyk | 无需配置(内置 21 天冷却期) |
| 无 | 跳过 |
5. 自动合并策略
| 选项 | 行为 |
|---|---|
| 无 | 所有更新都需要人工审核 |
| 仅次要版本和补丁版本 | 自动合并安全更新,主要版本需审核 |
| 全部,但需批准 | 团队批准后自动合并 |
6. 更新计划
| 选项 | 配置值 |
|---|---|
| 每日 | "daily" |
| 每周(默认) | "weekly" |
| 每两周 | "biweekly" |
| 每月 | "monthly" |
7. 安装时安全工具
“应使用哪些安全工具来保护依赖项安装?”
| 选项 | 免费? | 功能 |
|---|---|---|
| socket npm wrapper | 是(测试版) | 包装 npm/npx,在安装前阻止恶意包。运行 socket wrapper on 即可在全系统启用。 |
| npq | 是 | 安装前审核工具(检查 CVE、拼写仿冒、包年龄和来源证明) |
| Socket Firewall (sfw) | 否 | 实时深度分析,阻止恶意包 |
| socket npm + npq | 是 | 组合使用这两款免费工具 |
| 无 | — | 跳过 |
加载 references/socket-cli-guide.md,查看完整的 Socket CLI 设置说明,包括身份验证以及免费功能与需身份验证功能的区别。
8. 锁文件验证
| 选项 | 行为 |
|---|---|
| 是(推荐) | 添加 lockfile-lint + CI 脚本 |
| 否 | 跳过 |
第 3 层:高级选项(仅在用户选择启用时)
“你想配置任何高级选项吗?”
9. 开发容器 — 生成加固的 .devcontainer/devcontainer.json(是/否)
10. 密钥管理器 — 1Password CLI / Infisical / 无
11. pnpm 信任策略 — 启用 trustPolicy: no-downgrade(仅限 pnpm 10.21+,是/否)
12. 冷却期例外 — 绕过冷却期的包名称(例如 @types/react、typescript、esbuild)
安全优先的升级原则
- 安装前设置冷却期 — 普通项目等待 7 天,SAP 企业级工作流/MCP 工作流等待 14 天,让社区有时间审查新版本的包
- 阻止安装后脚本 — 防止在
npm install期间执行任意代码 - 在 CI 中冻结锁文件 — 使用确定性安装(
npm ci、--frozen-lockfile) - 验证锁文件完整性 — 使用
lockfile-lint检测注入 - 审查后再信任 — 使用
npq或 Socket CLI 在安装前检查包 - 逐步升级 — 每次只升级一个主版本,并在每次升级之间进行测试
- 切勿盲目升级 — 未经审查,避免使用
npm update或npm-check-updates -u - 扫描前后都要进行 — 使用
socket scan检测 CVE 以外的供应链问题 - 固定 SAP MCP 可执行文件版本 — 在允许 MCP 服务访问 SAP 项目或租户之前,使用精确的 npm 版本或源代码提交固定版本
冷却期:防止供应链攻击
新发布的包可能包含恶意代码,并在数小时内被发现。配置冷却期,延迟安装。
快速设置
npm(.npmrc):
min-release-age=7
Bun(bunfig.toml):
[install]
minimumReleaseAge = 604800 # 7 days in seconds
minimumReleaseAgeExcludes = ["@types/bun", "typescript"]
pnpm(pnpm-workspace.yaml):
minimumReleaseAge: 10080 # 7 days in minutes
minimumReleaseAgeExclude:
- '@types/react'
- typescript
Yarn(.yarnrc.yml):
npmMinimalAgeGate: "7d"
npmPreapprovedPackages:
- "@types/react"
- "typescript"
加载 references/cooldown-config-guide.md,了解各包管理器的详细配置、CI 工具集成和排除模式。
使用 templates/<pm>-security.tmpl 获取可直接复制粘贴的配置文件。
禁用安装后脚本
安装后脚本是最常见的供应链攻击途径(Shai-Hulud、Nx、event-stream 事件)。
快速设置
npm:
npm config set ignore-scripts true
npm config set allow-git none
Bun:默认禁用。在 package.json 中允许特定包:
{ "trustedDependencies": ["esbuild", "sharp"] }
pnpm(10.0+):默认禁用。在 pnpm-workspace.yaml 中允许特定包:
allowBuilds:
esbuild: true
strictDepBuilds: true # Hard error on unreviewed scripts
加载 references/package-manager-security.md,了解各包管理器的完整加固措施,包括 pnpm trustPolicy、blockExoticSubdeps 和 @lavamoat/allow-scripts。
确定性和冻结安装
在 CI 中始终使用冻结安装命令,以确保构建可复现:
| 包管理器 | 命令 | 作用 |
|---|---|---|
| npm | npm ci | 删除 node_modules,安装锁文件中的精确版本 |
| Bun | bun install --frozen-lockfile | 如果锁文件不同步,则失败 |
| pnpm | pnpm install --frozen-lockfile | 如果锁文件不同步,则失败 |
| Yarn | yarn install --immutable --immutable-cache | 验证锁文件和缓存 |
| Deno | deno install --frozen | 冻结安装 |
将所有锁文件提交到版本控制:package-lock.json、bun.lock、pnpm-lock.yaml、yarn.lock、deno.lock。
锁文件验证
安装并配置 lockfile-lint,以检测锁文件注入攻击:
npm install --save-dev lockfile-lint
{
"scripts": {
"lint:lockfile": "lockfile-lint --path package-lock.json --type npm --allowed-hosts npm --validate-https",
"preinstall": "npm run lint:lockfile"
}
}
注意:lockfile-lint 目前不支持 Bun 的 bun.lock / bun.lockb 格式。
安装前安全审计
npq — 安装前审计工具
npm install -g npq
npq install <package> # Audit before installing
npq install <package> --dry-run # Audit without installing
# Shell alias for seamless use
alias npm='npq-hero'
# Use with other PMs
NPQ_PKG_MGR=pnpm npq install <package>
NPQ_PKG_MGR=bun npq install <package>
Socket Firewall(sfw)— 实时拦截工具
npm install -g sfw
sfw npm install <package> # Blocks malicious packages
sfw pnpm add <package>
sfw yarn add <package>
加载 references/supply-chain-security.md,了解 npq 与 sfw 的完整对比,以及它们各自会验证的内容。
Socket CLI 集成
Socket CLI 提供超越基本漏洞扫描的主动供应链安全防护,涵盖恶意软件检测、仿冒包检测、抗议软件、安装脚本风险和许可证合规性。
主动升级工作流
1. PRE-UPGRADE: socket scan create --report → establish baseline
2. EVALUATE: socket package score npm <pkg>@<ver> → assess target package safety
3. SAFE INSTALL: socket npm install <pkg> → block malicious packages
4. POST-UPGRADE: socket scan create --report → verify no new alerts
5. DIFF: socket scan diff <before> <after> → see exactly what changed
6. FIX: socket fix --minimum-release-age 7d → auto-fix any new CVEs
7. OPTIMIZE: socket optimize → apply security overrides
快速参考
# Install
npm install -g socket
# Authenticate (required for scans, fixes, package scores)
socket login
# Check a package before upgrading
socket package score npm <package>
# Scan your whole project
socket scan create --report
# Auto-fix CVEs (complements Dependabot/Renovate)
socket fix --minimum-release-age 7d
# Gate CI on security policy
socket ci
# Safe npm wrapper (free, no auth needed)
socket wrapper on
加载 references/socket-cli-guide.md,了解完整的命令参考、CI 工作流模板、警报类别,以及免费功能与身份验证功能对照表。
依赖项分析
# Audit for vulnerabilities
bun audit # Bun
npm audit # npm
yarn audit # Yarn
# Socket: deep security assessment (CVEs + supply chain + license)
socket package score npm <package>
socket scan create --report
# Check for outdated packages
bun outdated
npm outdated
# Interactive upgrade (safe — review each)
bunx npm-check-updates --interactive
# Analyze dependency tree
npm ls <package-name>
yarn why <package-name>
分阶段升级策略
每次只升级一个依赖项,并在每次升级之间进行测试:
# 1. Create feature branch
git checkout -b upgrade/<package>-<version>
# 2. (Optional) Baseline scan — capture current state
socket scan create --report
# 3. Evaluate target package before upgrading
socket package score npm <package>@<version>
# 4. Upgrade single package
bun add <package>@<version>
# 5. Test immediately
bun test && bunx tsc --noEmit && bun run build
# 6. (Optional) Post-upgrade scan — verify no new alerts
socket scan create --report
# 7. Commit and continue
git add -A && git commit -m "chore: upgrade <package> to <version>"
加载 references/staged-upgrades.md,了解 codemod 自动化、自定义迁移脚本和对等依赖项的处理方式。
加载 references/compatibility-matrix.md,查看版本兼容性表(React 18/19、Next.js 13-15、TypeScript、Tailwind 3/4)。
使用冷却期实现自动更新
配置 CI/CD 工具遵守冷却期:
Dependabot(.github/dependabot.yml)
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
cooldown:
default-days: 7
Renovate(renovate.json)
{
"extends": ["config:base"],
"minimumReleaseAge": "7 days",
"packageRules": [
{
"matchUpdateTypes": ["minor", "patch"],
"automerge": true
},
{
"matchUpdateTypes": ["major"],
"automerge": false,
"minimumReleaseAge": "14 days"
}
]
}
Snyk
Snyk 内置了针对升级 PR 的 21 天冷却期,无需配置。
Socket Fix(与 Dependabot/Renovate 配合使用)
Socket Fix 会通过智能升级规划自动解决 CVE。它与其他自动化工具并行运行,专注于 CVE 修复:
# Fix all fixable CVEs with cooldown alignment
socket fix --minimum-release-age 7d
# Conservative: no major version bumps
socket fix --minimum-release-age 7d --no-major-updates
# Target specific CVEs
socket fix --id GHSA-hhq3-ff78-jv3g --minimum-release-age 7d
# Preview without applying
socket fix --no-apply-fixes --minimum-release-age 7d
如需启用 CI 自动驾驶模式(自动创建并自动合并修复 PR),请使用 templates/socket-fix-ci.tmpl。
加载 references/socket-cli-guide.md,查看完整的 socket fix 选项,包括 --autopilot、--range-style 和 --pr-limit。
使用 templates/dependabot-security.tmpl 或 templates/renovate-security.tmpl 获取完整配置文件。
发布安全
面向软件包维护者:
# Enable 2FA
npm profile enable-2fa auth-and-writes
# Publish with provenance (cryptographic build proof)
npm publish --provenance
# Trusted publishing via OIDC (eliminates long-lived tokens)
# Configure on npmjs.com, then:
# In GitHub Actions: permissions: id-token: write
加载 references/supply-chain-security.md,查看完整的发布安全指南,包括 OIDC 设置和依赖树精简。
开发环境加固
将依赖项的执行与主机系统隔离:
- 开发容器 — 限制恶意软件包造成的影响范围
- 密钥管理 — 使用 1Password CLI 或 Infisical 代替明文
.env文件 - 依赖树精简 — 使用原生 JS 替换常见软件包
使用 templates/devcontainer-security.tmpl 获取经过加固的开发容器配置。
加载 references/secrets-and-containers.md,查看开发容器设置、密钥管理和依赖精简模式。
测试策略
每次升级后,都要在各个层级运行测试:
# 1. Static analysis (fastest)
bunx tsc --noEmit && bun run lint
# 2. Unit tests
bun test
# 3. Build check
bun run build
# 4. Integration / E2E (after major upgrades)
bun run test:e2e
加载 references/testing-strategy.md,查看完整的测试金字塔、CI 集成和包体积分析。
回滚计划
#!/bin/bash
git stash
git checkout -b upgrade/<package>
bun add <package>@latest
if bun test && bun run build; then
git add package.json bun.lock
git commit -m "chore: upgrade <package>"
else
echo "Upgrade failed, rolling back"
git checkout main
git branch -D upgrade/<package>
bun install
fi
升级检查清单
Pre-Upgrade:
- [ ] Review current dependency versions
- [ ] Read changelogs for breaking changes
- [ ] Create feature branch
- [ ] Tag current state (git tag pre-upgrade)
- [ ] Run full test suite (baseline)
- [ ] Verify cooldown period is configured
- [ ] For SAP MCP changes, verify exact package/source pins against `references/sap-mcp-inventory.json`
Security Pre-Checks:
- [ ] Post-install scripts are disabled
- [ ] Lockfile validation is active
- [ ] Install auditing tools configured (if applicable)
- [ ] CI uses frozen-lockfile install
- [ ] Run `socket scan create --report` for baseline (if Socket available)
During Upgrade:
- [ ] Upgrade one dependency at a time
- [ ] Check target package: `socket package score npm <pkg>` (if Socket available)
- [ ] Respect cooldown period (don't force latest)
- [ ] Update peer dependencies
- [ ] Fix TypeScript errors
- [ ] Run test suite after each upgrade
- [ ] Check bundle size impact
Post-Upgrade:
- [ ] Post-upgrade scan: `socket scan diff` to verify no new alerts (if Socket available)
- [ ] Consider `socket fix --minimum-release-age 7d` for any new CVEs
- [ ] Full regression testing
- [ ] Performance testing
- [ ] Update documentation
- [ ] Deploy to staging
- [ ] Monitor for errors
- [ ] Deploy to production
常见陷阱
- 一次性升级所有依赖项(应逐步升级)
- 未经审查就盲目运行
npm update或npm-check-updates -u - 未在每次单独升级后进行测试
- 忽略 peer 依赖警告
- 忘记更新或提交锁定文件
- 未阅读变更日志中的重大变更说明
- 跳过主要版本,而不是逐步升级
- 没有回滚计划
- 信任 npmjs.org 显示的源代码(它可能与实际的 tarball 不同)
- 未禁用安装后脚本(这是最常见的攻击途径)
- 未为新软件包版本配置冷却期
- 发布使用
@latest、裸npx软件包或未固定的本地源代码路径的 SAP MCP 配置
何时加载参考文件
当用户需要了解 SKILL.md 快速参考之外的详细信息时,请加载以下参考文件:
| 加载此文件 | 适用场景 |
|---|---|
references/cooldown-config-guide.md | 为特定 PM 配置冷却时间、集成 CI 工具或设置排除模式 |
references/package-manager-security.md | 查看完整的各 PM 加固指南,包括 pnpm 信任策略、blockExoticSubdeps 和跨 PM 速查表 |
references/supply-chain-security.md | 了解攻击途径、事件历史、npq 与 sfw 和 Socket CLI 的比较、发布者安全性(2FA、来源证明、OIDC) |
references/secrets-and-containers.md | 设置开发容器,以及使用 1Password/Infisical 管理机密 |
references/socket-cli-guide.md | 使用 Socket CLI 扫描、修复、评估软件包、集成 CI、使用包装器模式和了解警报类别 |
references/compatibility-matrix.md | 检查 React、Next.js、TypeScript、Tailwind 升级的版本兼容性 |
references/staged-upgrades.md | Codemod 自动化、自定义迁移脚本、对等依赖项处理、工作区升级 |
references/testing-strategy.md | 完整的测试金字塔、CI 集成、包体分析、性能测试 |
references/sap-dependency-risk-matrix.md | 跨 Node、Java、Python、容器、BTP/CF/mbt、ABAP/gCTS 和 MCP 的 SAP 技术栈专属依赖项审查 |
references/sap-mcp-security.md | SAP MCP 精确锁定策略、SAC 源码安装策略和 MCP 更新工作流 |
references/sap-mcp-inventory.json | 机器可读的已批准 SAP MCP 软件包/源码固定版本,供 npm run validate:mcp-security 使用 |
模板文件
templates/ 中可直接使用的配置文件:
| 模板 | 用途 |
|---|---|
npmrc-security.tmpl | 禁用脚本并设置冷却时间的安全 .npmrc |
bunfig-security.tmpl | 设置冷却时间和排除项的安全 bunfig.toml |
pnpm-workspace-security.tmpl | 设置冷却时间、allowBuilds 和 trustPolicy 的安全 pnpm-workspace.yaml |
yarnrc-security.tmpl | 设置版本限制和预批准软件包的安全 .yarnrc.yml |
dependabot-security.tmpl | 设置 7 天冷却时间的 Dependabot 配置 |
renovate-security.tmpl | 设置 minimumReleaseAge 和自动合并规则的 Renovate 配置 |
devcontainer-security.tmpl | 采用安全选项加固的开发容器 |
socket-fix-ci.tmpl | GitHub Actions:与冷却时间同步进行 CVE 修复的 Socket Fix 自动驾驶配置 |
socket-scan-ci.tmpl | GitHub Actions:针对每次推送/PR 的 Socket CI 安全门禁 |
sap-mcp-config.tmpl | 供审查的 SAP MCP 配置候选项,附带精确锁定检查清单 |
maven-security.tmpl | SAP Java 项目的 Maven 校验和/强制规则/依赖项扫描片段 |
gradle-security.tmpl | Gradle 依赖项锁定和验证片段 |
python-security.tmpl | SAP AI SDK、HANA ML 和数据工具的 Python 锁定/审计工作流 |
container-trivy.tmpl | 使用 Trivy 扫描容器映像的工作流,并附带摘要锁定提醒 |
btp-cf-mbt-review.tmpl | BTP、Cloud Foundry 和 MBT 依赖项/部署审查清单 |
abap-gcts-review.tmpl | ABAP、gCTS 和传输依赖项审查清单 |