从入门到精通:npm-security-best-practices的15个实用安全技巧
从入门到精通npm-security-best-practices的15个实用安全技巧【免费下载链接】npm-security-best-practicesContinuous updates on how to stay safe from NPM supply chain attacks项目地址: https://gitcode.com/gh_mirrors/np/npm-security-best-practicesnpm生态系统频繁面临软件包妥协、供应链攻击和恶意软件等安全威胁。npm-security-best-practices项目汇集了一系列实用技巧帮助开发者和维护者保护自己免受这些安全事件的影响。本文将详细介绍15个关键安全实践让你从入门到精通npm安全防护。一、遭遇安全问题立即行动指南当npm供应链遭受攻击时迅速采取正确的应对措施至关重要。以下是你需要立即执行的关键步骤1. 识别受感染的软件包保持通过可信新闻源获取最新信息例如Socket.dev博客。同时使用漏洞数据库如Snyk安全中心或Socket.dev搜索来确认受感染的软件包。图1npm安全威胁示意图 - 展示了恶意软件如何通过npm包传播2. 保留证据后再清理在删除缓存或node_modules之前保存CI日志、包管理器日志、锁定文件、package.json、npm令牌审计历史以及带时间戳的已安装软件包列表。这些信息有助于后续的根本原因分析和凭证影响评估。3. 移除并替换受感染的软件包# 移除项目缓存 rm -rf node_modules yarn cache clean pnpm cache delete # 移除全局缓存 npm cache clean --force yarn cache clean --mirror bun pm cache rm pnpm store prune降级并固定依赖到已知的干净版本或完全移除它们。使用npx npkill命令从系统中移除所有node_modules文件夹。4. 限制或禁用自动化脚本在调查期间禁用自动化流水线或对其进行限制。同时轮换所有凭证包括npm令牌、GitHub PAT、SSH密钥和云服务提供商凭证。二、开发者安全最佳实践1. 固定依赖版本默认情况下npm使用 caret (^) 操作符安装依赖这允许安装最新的次要或补丁版本。为了确保依赖版本的稳定性和安全性建议固定精确版本npm install --save-exact react pnpm add --save-exact react yarn add --save-exact react bun add --exact react deno add npm:react19.1.1你还可以通过配置文件设置默认行为npm config set save-exacttrue pnpm config set save-exact true yarn config set defaultSemverRangePrefix 对于bun在bunfig.toml中设置[install] exact true2. 包含锁定文件确保将包管理器的锁定文件提交到git并在不同环境之间共享。不同包管理器的锁定文件包括npm的package-lock.json、pnpm的pnpm-lock.yaml、bun的bun.lock、yarn的yarn.lock和deno的deno.lock。在自动化环境中应使用锁定文件安装精确的依赖npm ci bun install --frozen-lockfile yarn install --frozen-lockfile pnpm install --frozen-lockfile deno install --frozen3. 禁用生命周期脚本生命周期脚本如preinstall和postinstall是恶意行为者常用的攻击途径。建议全局禁用这些脚本npm config set --global ignore-scripts true yarn config set --home enableScripts falseBun、Deno和Pnpm默认禁用生命周期脚本。对于npm v12allowScripts默认设置为false提供了更细粒度的控制允许为特定可信包启用脚本。4. 安装前预防措施在安装任何包之前使用预安装扫描器增加安全性Socket Firewall Free:npm i -g sfw然后使用sfw npm install package-nameAikido Safe Chain:npm install -g aikidosec/safe-chainnpq:npq install express此外设置最小发布年龄避免安装刚发布的包npm config set --global min-release-age7 pnpm config set --global minimumReleaseAge 1440 yarn config set --home npmMinimalAgeGate 7d5. 运行时保护除了安装和构建阶段的安全措施还可以在JavaScript应用程序的运行时添加额外的安全层权限模型使用Node.js的权限模型控制进程对系统资源的访问node --permission --allow-fs-read* --allow-fs-write* index.js强化JavaScript使用SES和LavaMoat等工具限制每个包对平台API的访问防止修改JavaScript的原始对象。6. 减少外部依赖尽可能使用内置模块替代第三方库减少供应链攻击面NPM库内置模块axios, node-fetch原生fetch APIjest, mochanode:test, node:assertnodemonnode --watchdotenvnode --env-file使用npmgraph.js.org可视化库依赖关系或使用knip移除未使用的依赖。7. 隔离开发环境在隔离环境中开发代码是防止供应链攻击的有效方法。可以使用虚拟机如VirtualBox、VMware、云沙箱如CodeSandbox、GitHub Codespaces或基于容器的开发环境。三、维护者安全最佳实践8. 启用双因素认证(2FA)为npm账户启用2FA增加额外的安全层。从2025年12月开始创建新包时将默认启用2FAnpm profile enable-2fa auth-and-writes建议配置支持WebAuthn的安全密钥而不是基于时间的一次性密码(TOTP)。9. 创建有限访问的令牌优先使用可信发布而非令牌。如果必须使用令牌创建粒度访问令牌使用描述性的令牌名称限制令牌访问特定包、作用域和组织设置令牌过期日期基于IP地址范围限制访问选择只读或读写访问权限10. 生成来源声明来源声明通过提供包的源代码链接和构建说明让开发者在下载前验证包的构建方式npm publish --provenance可以通过设置环境变量NPM_CONFIG_PROVENANCEtrue或在.npmrc中添加provenancetrue或在package.json中添加publishConfig块来自动生成来源声明。11. 审查已发布文件在package.json中使用files字段指定应包含在已发布包中的文件减少攻击面并避免敏感数据泄露{ name: my-package, version: 1.0.0, main: dist/index.js, files: [dist, LICENSE, README.md] }运行npm pack --dry-run或npm publish --dry-run查看发布内容。四、其他安全实践12. NPM组织安全在组织级别实施以下安全措施在组织级别启用Require 2FA最小化npm组织成员数量为所有包设置developers团队权限为READ创建单独的团队管理每个包的权限13. 替代注册表考虑使用JSR等现代JavaScript/TypeScript包注册表它与npm向后兼容deno add jsr:package-name pnpm add jsr:package-name # pnpm 10.9 yarn add jsr:package-name # yarn 4.9对于企业环境可以考虑使用私有注册表如GitHub Packages、Verdaccio或JFrog Artifactory。14. 审计、监控和安全工具利用各种工具进行依赖项审计和安全监控包管理器审计npm audit pnpm audit bun audit deno auditGitHub工具Dependabot、软件物料清单(SBOMs)和代码扫描。OpenSSF Scorecard自动评估软件安全的重要启发式方法。Socket.dev保护代码免受易受攻击和恶意依赖的影响。Snyk修复开源依赖中的漏洞。15. 支持开源软件维护者 burnout 是开源社区的一个重要问题。通过捐赠和支持你使用的开源项目帮助创建更可持续的开源开发生态GitHub SponsorsOpen CollectiveThanks.devOpen Source Pledge支持开源不仅有助于项目的长期维护还能减少维护者因疲劳而导致的安全漏洞风险。总结npm安全最佳实践涵盖了从应急响应到日常开发的全方位安全措施。通过实施这些技巧你可以显著提高项目的安全性防范供应链攻击和其他安全威胁。记住安全是一个持续过程需要不断关注最新的威胁和防御技术。项目中提供了示例.npmrc文件以及其他配置文件示例如bunfig.toml、pnpm-workspace.yaml和deno.json可以直接参考使用。此外还有一个辅助脚本default.sh可自动设置多个包管理器的全局默认值。希望这15个实用安全技巧能帮助你构建更安全的npm项目保护你的代码和数据免受潜在威胁【免费下载链接】npm-security-best-practicesContinuous updates on how to stay safe from NPM supply chain attacks项目地址: https://gitcode.com/gh_mirrors/np/npm-security-best-practices创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考