This report was generated in Chinese. Some content may be in Chinese.
Low Risk — Risk Score 25/100
Last scan:3 hr ago Rescan
25 /100
xhs-monitor
小红书竞品监控 - 自动采集竞品笔记,推送飞书通知,写入数据看板
合法的小红书竞品监控爬虫工具,功能与声明基本一致,存在轻微文档-代码差异(stealth插件未正确使用、目录结构不符),无恶意行为。
Skill Namexhs-monitor
Duration48.9s
Enginepi
ClawHub 小红书竞品监控助手 v1.0.1 by cstdr
📥 196 📦 1
ClawHub Verdict Suspicious dangerous_execllm_suspiciousvt_suspicious
Safe to install
可安全使用。建议:1) 添加 puppeteer-extra/puppeteer-core 版本锁定;2) 修正 SKILL.md 中 src/ 目录与实际路径的不一致;3) 补充 stealth 插件声明(如需使用)。

Findings 4 items

Severity Finding Location
Low
Stealth 反爬插件引用但未实际使用 Doc Mismatch
scraper.js 加载了 puppeteer-extra 和 stealth 插件并调用 puppeteerExtra.use(StealthPlugin()),但启动浏览器用的是 puppeteerCore.launch() 而非 puppeteerExtra.launch(),导致 stealth 功能从未生效。这是代码残留或阴影功能痕迹。
puppeteerExtra.use(StealthPlugin()); // ... browser = await puppeteerCore.launch({...})
→ 如不需要反检测功能,移除 puppeteer-extra 和 stealth 依赖;如需要,在 SKILL.md 中声明
scraper.js:10
Low
文档目录结构与实际文件布局不符 Doc Mismatch
SKILL.md 中的「项目结构」章节声称文件位于 src/ 子目录下(如 src/main.js、src/scraper.js),但实际上所有 .js 文件均位于项目根目录。
src/
│   ├── main.js         # 主程序入口
→ 修正 SKILL.md 中的项目结构图,或将所有 .js 文件移入 src/ 目录
SKILL.md:73
Low
puppeteer-extra 和 puppeteer-core 无版本锁定 Supply Chain
package.json 中 puppeteer-extra 和 puppeteer-core 的版本为 *(无锁定),攻击者可能通过供应链投毒植入恶意代码。
npm install puppeteer-core
npm install puppeteer-extra
→ 使用固定版本号:npm install [email protected] && npm install [email protected]
SKILL.md:18
Info
本地 shell 执行未在文档中声明 Doc Mismatch
scheduler.js:27 通过 child_process.spawn('node', ...) 执行本地 main.js,run.sh 也执行 shell 命令,但 SKILL.md 未声明 shell:WRITE 能力。
const child = spawn('node', [mainPath], {...});
→ 在 SKILL.md 中补充说明使用 child_process 定时触发任务
scheduler.js:27
ResourceDeclaredInferredStatusEvidence
Filesystem WRITE WRITE ✓ Aligned dedupe.js:23 — 写入 ../data/history.csv
Network READ READ ✓ Aligned scraper.js:183 — 访问 xiaohongshu.com;notify.example.js — 访问 feishu API
Browser WRITE WRITE ✓ Aligned scraper.js:175 — puppeteerCore.launch() 创建无头浏览器
Shell NONE WRITE ✓ Aligned scheduler.js:27 — spawn('node', [mainPath]);run.sh:41 — node main.js
Environment NONE READ ✓ Aligned scraper.js:13 — process.env.CHROMIUM_PATH;run.sh:11 — XHS_DATA_DIR
5 findings
🔗
Medium External URL 外部 URL
https://www.xiaohongshu.com/user/profile/用户ID1
SKILL.md:83
🔗
Medium External URL 外部 URL
https://www.xiaohongshu.com/user/profile/用户ID2
SKILL.md:84
🔗
Medium External URL 外部 URL
https://www.xiaohongshu.com/
SKILL.md:98
🔗
Medium External URL 外部 URL
https://www.xiaohongshu.com/user/profile/小红书用户ID
config.example.js:20
🔗
Medium External URL 外部 URL
https://www.xiaohongshu.com/user/profile/
config.js:12

File Tree

12 files · 32.5 KB · 1194 lines
JavaScript 10f · 966L Markdown 1f · 183L Shell 1f · 45L
├─ 📜 config.example.js JavaScript 26L · 745 B
├─ 📜 config.js JavaScript 27L · 860 B
├─ 📜 daemon.js JavaScript 70L · 1.9 KB
├─ 📜 dedupe.js JavaScript 60L · 1.4 KB
├─ 📜 interactive.js JavaScript 181L · 5.1 KB
├─ 📜 main.js JavaScript 20L · 663 B
├─ 📜 notify.example.js JavaScript 75L · 2.6 KB
├─ 📜 parser.js JavaScript 115L · 3.3 KB
├─ 🔧 run.sh Shell 45L · 1.4 KB
├─ 📜 scheduler.js JavaScript 45L · 931 B
├─ 📜 scraper.js JavaScript 347L · 9.6 KB
└─ 📝 SKILL.md Markdown 183L · 4.1 KB

Dependencies 3 items

PackageVersionSourceKnown VulnsNotes
puppeteer-core 未指定 npm No 无版本锁定,建议锁定版本
puppeteer-extra 未指定 npm No 无版本锁定,被引用但未正确使用
puppeteer-extra-plugin-stealth 未指定 npm No 无版本锁定,被引用但未正确使用

Security Positives

✓ 功能实现完整:爬虫→解析→去重→推送全链路
✓ 无凭证收割:无任何读取 SSH、AWS、.env 等敏感路径的代码
✓ 无数据外泄:所有数据(history.csv、notes.json)仅存储在本地,无外部上传
✓ 无混淆编码:无 base64/eval/动态代码生成等反分析技术
✓ 无反向 shell 或 C2 通信
✓ 飞书推送为标准 API 调用,路径清晰可控
✓ 去重机制基于本地 CSV,无隐蔽数据外传通道
✓ 代码结构清晰,模块职责单一,易于人工审计