Skill Trust Decision

xhs-monitor

合法的小红书竞品监控爬虫工具,功能与声明基本一致,存在轻微文档-代码差异(stealth插件未正确使用、目录结构不符),无恶意行为。

Install decision first Source: ClawHub Scanned: Apr 6, 2026
Files 12
Artifacts 5
Violations 0
Findings 4

Why this conclusion was reached

0/4 dimensions flagged
Pass
Declared vs actual capability

Declared resources and inferred behavior are broadly aligned.

Review
Hidden execution and egress

5 lower-risk artifacts were extracted and still need context.

Pass
Attack chain and severe findings

There is no explicit malicious chain in the report.

Review
Dependencies and supply chain hygiene

3 dependency or supply-chain issues need attention.

What drove the risk score up

stealth 反检测插件引用但未正确使用 +10

scraper.js 第7行 require('puppeteer-extra') 和第10行 puppeteerExtra.use(StealthPlugin()),但实际启动用的是 puppeteerCore.launch() 而非 puppeteerExtra.launch(),属于阴影功能痕迹

目录结构文档-代码不符 +8

SKILL.md 声称文件在 src/ 子目录下,但所有 .js 文件实际位于根目录

无版本锁定的第三方依赖 +7

puppeteer-extra 和 puppeteer-core 无版本锁定,存在供应链风险

Most important evidence

Low Doc Mismatch

Stealth 反爬插件引用但未实际使用

scraper.js 加载了 puppeteer-extra 和 stealth 插件并调用 puppeteerExtra.use(StealthPlugin()),但启动浏览器用的是 puppeteerCore.launch() 而非 puppeteerExtra.launch(),导致 stealth 功能从未生效。这是代码残留或阴影功能痕迹。

scraper.js:10
如不需要反检测功能,移除 puppeteer-extra 和 stealth 依赖;如需要,在 SKILL.md 中声明
Low Doc Mismatch

文档目录结构与实际文件布局不符

SKILL.md 中的「项目结构」章节声称文件位于 src/ 子目录下(如 src/main.js、src/scraper.js),但实际上所有 .js 文件均位于项目根目录。

SKILL.md:73
修正 SKILL.md 中的项目结构图,或将所有 .js 文件移入 src/ 目录
Low Supply Chain

puppeteer-extra 和 puppeteer-core 无版本锁定

package.json 中 puppeteer-extra 和 puppeteer-core 的版本为 *(无锁定),攻击者可能通过供应链投毒植入恶意代码。

SKILL.md:18
使用固定版本号:npm install [email protected] && npm install [email protected]
Info Doc Mismatch

本地 shell 执行未在文档中声明

scheduler.js:27 通过 child_process.spawn('node', ...) 执行本地 main.js,run.sh 也执行 shell 命令,但 SKILL.md 未声明 shell:WRITE 能力。

scheduler.js:27
在 SKILL.md 中补充说明使用 child_process 定时触发任务

Declared capability vs actual capability

Filesystem Pass
Declared WRITE
→
Inferred WRITE
dedupe.js:23 — 写入 ../data/history.csv
Network Pass
Declared READ
→
Inferred READ
scraper.js:183 — 访问 xiaohongshu.com;notify.example.js — 访问 feishu API
Browser Pass
Declared WRITE
→
Inferred WRITE
scraper.js:175 — puppeteerCore.launch() 创建无头浏览器
Shell Pass
Declared NONE
→
Inferred WRITE
scheduler.js:27 — spawn('node', [mainPath]);run.sh:41 — node main.js
Environment Pass
Declared NONE
→
Inferred READ
scraper.js:13 — process.env.CHROMIUM_PATH;run.sh:11 — XHS_DATA_DIR

Suspicious artifacts and egress

Medium External URL
https://www.xiaohongshu.com/user/profile/用户ID1

SKILL.md:83

Medium External URL
https://www.xiaohongshu.com/user/profile/用户ID2

SKILL.md:84

Medium External URL
https://www.xiaohongshu.com/

SKILL.md:98

Medium External URL
https://www.xiaohongshu.com/user/profile/小红书用户ID

config.example.js:20

Medium External URL
https://www.xiaohongshu.com/user/profile/

config.js:12

Dependencies and supply chain

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

File composition

12 files · 1194 lines
JavaScript 10 files · 966 linesMarkdown 1 files · 183 linesShell 1 files · 45 lines
Files of concern · 5
scraper.js JavaScript · 347 lines
Stealth 反爬插件引用但未实际使用
SKILL.md Markdown · 183 lines
文档目录结构与实际文件布局不符 · puppeteer-extra 和 puppeteer-core 无版本锁定 · https://www.xiaohongshu.com/user/profile/用户ID1 · https://www.xiaohongshu.com/user/profile/用户ID2 · https://www.xiaohongshu.com/
scheduler.js JavaScript · 45 lines
本地 shell 执行未在文档中声明
config.js JavaScript · 27 lines
https://www.xiaohongshu.com/user/profile/
config.example.js JavaScript · 26 lines
https://www.xiaohongshu.com/user/profile/小红书用户ID
Other files · interactive.js · parser.js · notify.example.js · daemon.js · dedupe.js · run.sh +1

Security positives

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