Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/kevinslin/safe-npm
通用工具漏洞分析脚本与自动化DevSecOps供应链安全
GitHubkevinslin/safe-npm

safe-npm

安全安装 NPM 包

查看仓库
193949个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

safe-npm

一款注重安全的 npm 安装工具,可保护您的项目免受新被入侵的包的影响。

为什么存在?

针对 npm 包的供应链攻击正在成为一种日益增长的威胁。攻击者有时会通过以下方式入侵合法包:

  • 窃取维护者凭据
  • 向流行包发布恶意更新
  • 接管被遗弃的包

这些攻击往往突然发生——昨天还安全的包今天可能已被入侵。safe-npm 通过只安装那些已公开发布至少一段最短时间(默认 90 天)的包版本来保护您。这样,安全社区就有时间在恶意版本到达您的项目之前发现并报告它们。

工作原理

当您运行 safe-npm install 时,它会:

  1. 从 package.json 或命令行参数读取您的依赖项
  2. 查询 npm 注册表以获取所有可用版本
  3. 过滤掉发布时间晚于最小年龄阈值的版本
  4. 选择同时满足语义化版本要求和年龄要求的最新版本
  5. 使用 npm 安装安全版本

例如,如果您指定 react@^18 并且一个恶意的 [email protected] 是昨天发布的,safe-npm 将安装最新的、至少 90 天前的版本。

安装

从 npm 安装(推荐)

root@kitploit:~
# 全局安装
npm install -g @dendronhq/safe-npm

# 现在您可以在任何地方使用它
safe-npm install

从源码构建

root@kitploit:~
# 克隆并构建
git clone <repository-url>
cd safe-npm
npm install
npm run build

# 全局链接二进制文件
npm link

基本用法

从 package.json 安装依赖

root@kitploit:~
# 使用最小 90 天(默认)
safe-npm install

# 或指定您自己的最小天数
safe-npm install --min-age-days 120

安装特定包

root@kitploit:~
# 直接安装带版本约束的包
safe-npm install react@^18 lodash@^4.17.0

# 这些包将被过滤,只使用至少 90 天前的版本
safe-npm install express --min-age-days 60

试运行以查看将要安装的内容

root@kitploit:~
# 预览将安装哪些版本,而不实际安装
safe-npm install --dry-run

配置选项

--min-age-days <n>

默认值: 90

一个包版本必须已发布的最小天数,之后才能被安装。

示例: --min-age-days 120 要求包至少已存在 4 个月。

何时调整:

  • 为最大安全性增加(例如关键生产系统设为 180 天)
  • 如果您需要新功能且接受稍高风险则减少(例如 30 天)

--ignore <pkg1,pkg2>

一个逗号分隔的包列表,这些包将绕过年龄要求。这些包仍会遵循语义化版本范围,但忽略最小年龄。

示例: --ignore typescript,@types/node

何时使用:

  • 您信任的快速迭代包(如 TypeScript 或构建工具)
  • 来自您组织的内部包
  • 急需最新功能的包

--strict

如果任何依赖项无法解析到满足年龄要求的版本,则退出并报错。

示例: safe-npm install --strict

何时使用:

  • CI/CD 管道中,希望构建失败而不是跳过有问题的包
  • 需要确定性的生产部署

--dev / --prod-only

控制处理 package.json 中的哪些依赖项。

示例:

  • safe-npm install --dev - 仅安装 devDependencies
  • safe-npm install --prod-only - 仅安装生产依赖

何时使用:

  • 使用更严格要求安装开发工具
  • 对开发和生产依赖应用不同年龄策略的生产构建

--strategy <direct|overrides>

默认值: direct

safe-npm 如何安装解析后的版本:

direct - 直接使用 npm install package@version 安装解析后的版本

  • 简单直接
  • 适合一次性安装或脚本

overrides - 将解析后的版本写入 package.json 的 overrides 字段,然后运行 npm install

  • 在整个依赖树(包括传递依赖)中强制版本
  • 注意: 此功能当前已禁用,因为它尚不能正常工作

--registry <url>

默认值: https://registry.npmjs.org

指定一个备用的 npm 注册表。

示例: --registry https://registry.company.com

何时使用:

  • 私有 npm 注册表
  • 镜像或缓存

--dry-run

显示将要安装的内容,而不做任何更改。

示例: safe-npm install --dry-run

何时使用:

  • 测试您的配置
  • 了解哪些版本可用
  • 在对生产系统进行更改之前

常见工作流

安全地设置新项目

root@kitploit:~
# 创建新项目
mkdir my-project && cd my-project
npm init -y

# 安全地安装依赖
safe-npm install express@^4 lodash

# 这将创建带有至少 90 天前版本的 package-lock.json

审计现有项目

root@kitploit:~
# 检查在年龄要求下将安装哪些版本
safe-npm install --dry-run

# 如果您满意,就安装它们
safe-npm install

CI/CD 集成

root@kitploit:~
# 在 CI 管道中,如果任何包无法满足年龄要求则构建失败
safe-npm install --strict --min-age-days 120

# 或者仅对开发依赖允许较新的包
safe-npm install --prod-only --strict

紧急更新

root@kitploit:~
# 需要紧急更新特定包?将其添加到忽略列表
safe-npm install --ignore package-with-critical-fix

测试

该项目包含一个测试套件,您可以运行:

root@kitploit:~
npm test

对于自动测试,您可以使用 fixtures 模拟注册表响应:

root@kitploit:~
export SAFE_NPM_FIXTURES=/path/to/fixtures.json
safe-npm install

fixtures 文件应包含镜像 npm 注册表对每个包响应的 JSON。

如何保护您

真实场景:

  1. 一个流行包 popular-lib 由一位受信任的开发者维护
  2. 攻击者入侵了维护者的 npm 凭据
  3. 攻击者发布了带有恶意软件的 [email protected]
  4. 使用 ^5.0.0 的项目会立即安装恶意版本
  5. 使用 safe-npm,您将继续使用 4.9.0(90 天前的最新版本)
  6. 安全研究人员发现入侵并报告
  7. 恶意版本被取消发布
  8. 您从未安装过被入侵的版本

局限性

  • 无法保护最初就是恶意的包
  • 延迟获取真正的新功能和错误修复
  • 需要信任旧版本没有未发现的漏洞
  • 基于年龄的过滤是一种启发式方法,而非保证

哲学

安全性是关于权衡的。safe-npm 用跟随最新边缘更新的能力,换取免受突然的供应链入侵的保护。它是纵深防御策略中的一层,还应包括:

  • 定期安全审计(npm audit)
  • 添加新包前进行依赖审查
  • 监控安全公告
  • 使用锁文件确保可重复构建
  • 在沙箱或容器化环境中运行

要求

  • Node.js 18 或更高版本
  • npm(用于底层安装)

许可证

ISC

下载工具