mcpField
T
typosquat

typosquat

本地服务
github.com/CloudCorpRecords安全02 周前更新

关于 typosquat

typosquat 将项目 package.json 中的依赖与内置热门 npm 包名称列表比对,并标记相似项。它是离线且结果确定的命令行工具与 MCP 服务,用于检查可能的依赖名称仿冒。

主要功能

  1. 01读取 package.json 中四类依赖
  2. 02与热门 npm 包名称比对
  3. 03标记分隔符及编辑距离匹配
  4. 04列出作为证据的疑似仿冒包
  5. 05生成排序后的文本或 JSON 报告
  6. 06完全离线检查

适用场景

  1. 01安装项目之前审查依赖
  2. 02调查名称近似热门包的依赖
  3. 03在 CI 中执行可重复的依赖名称检查

MCP 相关

MCP 服务提供带 `path` 参数的 `check_typosquat`,返回与命令行 JSON 输出相同的报告,包括判定结果、计数、发现项和摘要。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cloudcorprecords-typosquat": {
"command": "npx",
"args": [
"-y",
"@reneturcios/typosquat"
]
}
}
}
启动命令npx -y @reneturcios/typosquat

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@reneturcios/typosquat0.1.0
ocighcr.io/cloudcorprecords/typosquat:0.1.0

工具

1

收录的工具列表 · 更新于 2 周前

参数类型必填说明
pathstring是要检查的目标路径

详细介绍

typosquat

用于依赖列表的拼写抢注检查器。它会读取项目的 package.json,收集 dependencies、 devDependencies、peerDependencies 和 optionalDependencies 中的所有依赖名称, 并将每个名称与内置的热门 npm 包名称列表进行比较。如果某个依赖本身不是热门包, 但名称与热门包十分相似,就会将其标记为可能的拼写抢注,并列出与之相似的热门包作为证据。

检查完全离线且结果确定:不进行网络请求、不使用时间戳,检查结果按依赖名称排序。

安装

npx @reneturcios/typosquat check .

也可以全局安装:

npm install -g @reneturcios/typosquat
typosquat check .

CLI

typosquat check [path] [--json]
typosquat mcp
typosquat --version
  • check [path]:检查 path 处的项目(包含 package.json 的目录,或直接指向 package.json 文件的路径)。默认使用当前目录。添加 --json 可生成机器可读报告。
  • mcp:通过 stdio 运行 MCP 服务。
  • --version:打印版本号。

退出码:判定结果为 CLEAR 时返回 0,判定结果为 SUSPECT 时返回 1,发生用法错误或 package.json 缺失、无效时返回 2。

人类可读输出示例:

typosquat 0.1.0
Target: .
Verdict: SUSPECT
Dependencies checked: 5
Flagged: 1
Summary: Checked 5 dependencies; 1 flagged as possible typosquats.
Findings:
- [HIGH] DISTANCE-1: Dependency "axioss" resembles popular package "axios" (edit distance 1) (evidence: axios)

MCP

MCP 服务提供一个工具:

  • check_typosquat,带有 path 参数。它返回与 CLI 的 --json 输出相同的报告:工具名称、版本、目标、判定结果、计数(depsChecked、flagged)、发现项和摘要。

匹配规则

比较前会将名称转换为小写。依赖名称本身已在热门列表中时,绝不会被标记。对于其他依赖,会采用最强匹配规则:

  • SEPARATOR-SQUAT(高严重性):去除两者中的连字符、下划线和点后,依赖名称与某个热门名称相同,但原始名称不同。例如:node_fetch 与 node-fetch。
  • DISTANCE-1(高严重性):与某个热门名称的 Levenshtein 编辑距离为 1。例如:axioss 与 axios。
  • DISTANCE-2(中严重性):与长度不少于 9 个字符的某个热门名称的 Levenshtein 编辑距离为 2。由于许多互不相关的短名称之间的编辑距离都不超过 2,因此不检查短名称的距离为 2 的匹配。例如:typescrpit 与 typescript。

不检查作用域混淆:如果一个无作用域依赖名称只与某个有作用域的热门名称中的无作用域部分相同(例如 client 与 @prisma/client),这个信号太弱,不会触发标记。

判定结果

  • CLEAR:没有依赖名称与热门包名称相似。
  • SUSPECT:至少有一个依赖被标记。

限制

  • 热门包列表是截至 2026-10-25 的快照,根据对 npm 生态的了解编制。列表会逐渐过时:新包会变热门,旧包会失去热度,而快照无法追踪这些变化。
  • 编辑距离可以检测拼写错误,但无法涵盖所有抢注方式。它无法检测组合抢注(将热门名称与额外单词组合,例如 axios-helper)、同形异义字符抢注或位抢注,也无法检测上述分隔符规则以外的作用域伎俩。
  • 检查器只读取名称,不检查包内容、维护者、下载量或发布历史,因此无法判断恶意意图。
  • 标记表示名称相似,而非指控。合法包也可能与热门名称只差一个字符。请将每条发现视为进一步检查的提示,而非不当行为的证据。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。