可信 — 风险评分 5/100
上次扫描:2 天前 重新扫描
5 /100
ai-coach
个人铁三教练 AI 技能,生成每日训练计划,集成 TrainingPeaks 和 Garmin 数据
合法的铁三教练 AI 技能,代码质量良好,声明与行为一致,无恶意行为或阴影功能。
技能名称ai-coach
分析耗时41.2s
引擎pi
可以安装
可安全使用。建议将 garminconnect 依赖版本锁定以减少供应链风险。

安全发现 3 项

严重性 安全发现 位置
低危
garminconnect 依赖无版本锁定
data_fetcher.py 使用 garminconnect 库但未在代码或文档中声明版本要求,建议锁定版本以减少供应链风险。
import garminconnect
→ 添加 requirements.txt 或在 SKILL.md 中明确版本约束,如 garminconnect>=0.2.0,<1.0.0
data_fetcher.py:22
提示
凭证存储符合最佳实践
tp_client.py 在存储 cookie 时设置 chmod 0o600 限制文件权限,防止其他用户读取认证凭证。
COOKIE_FILE.chmod(0o600)
→ 无需改进,已遵循安全最佳实践
scripts/tp_client.py:95
提示
使用标准库 HTTP 请求
tp_client.py 仅使用 urllib 标准库实现网络请求,未引入额外外部依赖,降低了供应链风险。
import urllib.request, urllib.error
→ 无需改进,标准库使用安全可靠
scripts/tp_client.py:1
资源类型声明权限推断权限状态证据
文件系统 READ READ ✓ 一致 tp_client.py:82 read ~/.trainingpeaks/cookie, data_fetcher.py:12 read user_confi…
文件系统 WRITE WRITE ✓ 一致 tp_client.py:95 store_cookie writes with chmod 0o600; data_fetcher.py stores tok…
网络访问 READ READ ✓ 一致 tp_client.py:141-156 _http_request GET/POST to tpapi.trainingpeaks.com; data_fet…
环境变量 READ READ ✓ 一致 tp_client.py:72-77 os.environ.get('TP_AUTH_COOKIE'); data_fetcher.py reads garmi…
命令执行 NONE NONE No subprocess/os.system/exec calls found in any script
3 项发现
🔗
中危 外部 URL 外部 URL
https://tpstack.trainingpeaks.com
SKILL.md:31
🔗
中危 外部 URL 外部 URL
https://tpapi.trainingpeaks.com
scripts/tp_client.py:22
📧
提示 邮箱 邮箱地址
[email protected]
SKILL.md:69

目录结构

5 文件 · 40.9 KB · 1260 行
Python 3f · 1104L Markdown 1f · 143L JSON 1f · 13L
├─ 📁 scripts
│ ├─ 🐍 daily_plan.py Python 402L · 14.7 KB
│ ├─ 🐍 data_fetcher.py Python 243L · 7.8 KB
│ └─ 🐍 tp_client.py Python 459L · 14.6 KB
├─ 📝 SKILL.md Markdown 143L · 3.6 KB
└─ 📋 user_config.json JSON 13L · 232 B

依赖分析 1 项

包名版本来源已知漏洞备注
garminconnect * pip 无版本锁定,存在潜在供应链风险但无已知漏洞

安全亮点

✓ 文档声明与代码实现完全一致,无阴影功能
✓ 凭证存储采用 chmod 0o600 权限限制,符合安全最佳实践
✓ TP 客户端使用标准库 urllib,无外部依赖
✓ 无 shell 执行、subprocess、eval 等高危操作
✓ 网络请求仅指向官方域名(tpapi.trainingpeaks.com),无裸 IP 或可疑 URL
✓ 代码结构清晰,有完整的异常处理
✓ 无 base64 解码、管道执行、隐藏指令等恶意模式
✓ 凭证仅用于官方 API 认证,未外传