Low Risk — Risk Score 20/100
Last scan:10 hr ago Rescan
20 /100
todo-webapp
本地 TODO.md 的 Web 可视化界面,支持 LAN 访问、SSE 实时刷新、打勾归档
零依赖 Node.js TODO Web 应用,功能与文档基本一致,无恶意行为,仅存在轻微安全瑕疵(无 CSRF 保护、缺少模板文件)。
Skill Nametodo-webapp
Duration44.4s
Enginepi
Safe to install
可信发布。如需加强安全,可为 POST 端点添加 CSRF token,并将 CORS 改为限制性来源。

Findings 3 items

Severity Finding Location
Low
文档提及不存在的模板文件 Doc Mismatch
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
Low
bg.jpg 为 optional 但代码未容错 Supply Chain
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
Low
SSE 端点允许任意跨域访问 Sensitive Access
/events 端点的 Access-Control-Allow-Origin 设为 *,允许任意来源的跨域 SSE 连接。
'Access-Control-Allow-Origin': '*'
→ 如非跨域使用场景,改为与 Origin 匹配或移除该头
scripts/server.js:262
ResourceDeclaredInferredStatusEvidence
Filesystem WRITE WRITE ✓ Aligned scripts/server.js:54 fs.writeFileSync(TODO_PATH)
Network READ READ ✓ Aligned scripts/server.js:303 server.listen(PORT, '0.0.0.0')
Shell NONE NONE 代码中无 subprocess/spawn/exec 调用
1 findings
🔗
Medium External URL 外部 URL
https://i.imgur.com/noOCejM.jpeg
SKILL.md:10

File Tree

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

Dependencies 1 items

PackageVersionSourceKnown VulnsNotes
Node.js built-in (http, fs, path) bundled core No 零外部依赖,无第三方供应链风险

Security Positives

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