我如何在 npm install 运行前检测 typosquatting 攻击
发布: (2026年1月13日 GMT+8 07:09)
3 min read
原文: Dev.to
Source: Dev.to
介绍
上周我发布了 Sapo,一个预安装安全扫描器。今天我将展示它是如何检测最常见的攻击之一:typosquatting(拼写抢注)。
什么是 typosquatting?
攻击者注册与流行包名相似的包,例如:
lodahs替代lodashaxois替代axiosreacct替代reactexpresss替代express
这些假包通常依赖真实的包(所以看起来一切正常),并加入窃取凭证的恶意代码。
检测逻辑
1. 相似度检查
Sapo 使用 Levenshtein 距离计算请求的包名与已知流行包的“接近程度”:
fn levenshtein_distance(a: &str, b: &str) -> usize {
// Returns the number of single‑character edits needed
// to transform string a into string b
}
如果距离在 1–2 个字符之间,则认为该名称可疑。
2. 常见拼写错误模式
Sapo 会寻找人们实际会犯的错误模式:
- 字母颠倒:
axois→axios - 缺少字母:
expres→express - 重复字母:
expresss→express - 相邻键盘按键:
reacy→react
3. 热度对比
关键洞察在于下载量比例不匹配:
- 目标包:47 次下载
- 相似的流行包:4000 万+ 次下载
- 最近的创建日期
这种差距强烈表明该包是恶意的。
示例运行
$ npm install lodahs
[>] Scanning: lodahs@1.0.0
[!] BLOCKED: Typosquatting detected
Similar to: lodash
- lodash: 337,000,000 downloads
- lodahs: 47 downloads
- Levenshtein distance: 1
Installation cancelled.
真实的 lodash 有 3.37 亿次下载,而假冒的 lodahs 只有 47 次——这是一个巨大的红旗。
Sapo 工作原理
Sapo 在 npm 开始下载之前 拦截 命令:
You type: npm install lodahs
↓
Sapo intercepts
↓
API check: is "lodahs" safe?
↓
Response: TYPOSQUATTING DETECTED
↓
Installation blocked
↓
npm never runs
你的机器保持干净。
安装
curl -fsSL https://sapo.salta.world/install.sh | bash
重新打开终端后,尝试:
npm install lodahs
你将在任何东西被安装之前看到警告。
未来工作
- 基于机器学习的异常检测
- 沙箱分析
- VS Code 插件
如果你对接下来要检测的内容有想法,请在评论中告诉我!
链接
- GitHub: https://github.com/Salta1414/sapo-cli
- Website: https://sapo.salta.world