低风险 — 风险评分 20/100
上次扫描:10 小时前 重新扫描
20 /100
todo-webapp
本地 TODO.md 的 Web 可视化界面,支持 LAN 访问、SSE 实时刷新、打勾归档
零依赖 Node.js TODO Web 应用,功能与文档基本一致,无恶意行为,仅存在轻微安全瑕疵(无 CSRF 保护、缺少模板文件)。
技能名称todo-webapp
分析耗时44.4s
引擎pi
可以安装
可信发布。如需加强安全,可为 POST 端点添加 CSRF token,并将 CORS 改为限制性来源。

安全发现 3 项

严重性 安全发现 位置
低危
文档提及不存在的模板文件 文档欺骗
SKILL.md 第 3 步要求用户复制 assets/com.todo.plist.template 并编辑后放入 ~/Library/LaunchAgents/,但整个仓库中没有此文件。
Copy `assets/com.todo.plist.template` to `~/Library/LaunchAgents/com.todo.plist`
→ 在仓库中添加该模板文件,或更新文档说明如何手动创建 plist
SKILL.md:33
低危
bg.jpg 为 optional 但代码未容错 供应链
SKILL.md 说明 bg.jpg 是可选的背景图,但 server.js 在 bg.jpg 不存在时 fs.readFileSync 会抛 ENOENT 异常,导致 /bg.jpg 请求返回 500。
const BG_PATH = path.join(__dirname, 'bg.jpg');
→ 对 bg.jpg 的 fs.readFileSync 包裹 try/catch,文件不存在时返回 404
scripts/server.js:6
低危
SSE 端点允许任意跨域访问 敏感访问
/events 端点的 Access-Control-Allow-Origin 设为 *,允许任意来源的跨域 SSE 连接。
'Access-Control-Allow-Origin': '*'
→ 如非跨域使用场景,改为与 Origin 匹配或移除该头
scripts/server.js:262
资源类型声明权限推断权限状态证据
文件系统 WRITE WRITE ✓ 一致 scripts/server.js:54 fs.writeFileSync(TODO_PATH)
网络访问 READ READ ✓ 一致 scripts/server.js:303 server.listen(PORT, '0.0.0.0')
命令执行 NONE NONE 代码中无 subprocess/spawn/exec 调用
1 项发现
🔗
中危 外部 URL 外部 URL
https://i.imgur.com/noOCejM.jpeg
SKILL.md:10

目录结构

2 文件 · 17.1 KB · 565 行
JavaScript 1f · 485L Markdown 1f · 80L
├─ 📁 scripts
│ └─ 📜 server.js JavaScript 485L · 14.4 KB
└─ 📝 SKILL.md Markdown 80L · 2.7 KB

依赖分析 1 项

包名版本来源已知漏洞备注
Node.js built-in (http, fs, path) bundled core 零外部依赖,无第三方供应链风险

安全亮点

✓ 零外部依赖,无供应链风险
✓ 无 shell 执行,无代码注入
✓ 无凭证收割、无环境变量遍历
✓ 无外部网络通信,无数据外泄
✓ 无 base64/eval 等混淆技术
✓ HTML 输出正确做了 HTML 转义(escHtml 函数)