ℹ
Purpose & Capability
技能声明抓取 LightReading 与 TechCrunch、用 AI 生成中文要点并推送到企业微信;包含的脚本(push_combined.py / push_wechat.py / push_chinese.py / push_only.py 等)与文档一致。使用 cloudscraper 绕过 Cloudflare 与网页抓取目的相符. 不过 registry metadata 声明没有需要的环境变量或凭据,而代码中却硬编码了企业微信 Webhook(多处出现),这不一致且不安全。
!
Instruction Scope
SKILL.md 明确要求抓取、生成文件、AI 翻译(通过 agent 本身完成)并将最终文本发送到企业微信 webhook;这些都是合理的。但运行说明和脚本还包含:启动一个 HTTP 服务接收邮件(email_webhook.py,绑定所有接口并保存到磁盘),以及写入/删除自动生成文件和推送历史。SKILL.md 没有将 webhook 值申报为必需凭据(应由用户配置),而脚本直接将生产/发送目标写死在代码中。
✓
Install Mechanism
无安装 spec(指令型/纯脚本包)。依赖仅为 cloudscraper(列在 requirements.txt)——与跨 Cloudflare 抓取目的匹配且安装方式常见。没有远程下载或可疑安装来源。
!
Credentials
registry 显示无需环境变量或凭据,但多个脚本中硬编码了企业微信 WEBHOOK_URL(带具体 key),这 both (1) leakes the publisher's webhook and (2) prevents users from cleanly supplying their own credential via env var. AI 翻译被设计为在 agent 端完成,不需外部 API keys — 这是可解释的,但作者 should have declared the webhook or required env var instead of hardcoding. 无其它敏感凭据请求。
ℹ
Persistence & Privilege
技能不是 always: true,允许用户主动调用/定时调用(cron)。脚本会写入 files (today_*.txt, combined_*.txt, pushed_history.json, 保存 emails 目录),这是正常持久化行为 for this use case. 需要注意 email_webhook.py 开启的 HTTP 服务监听整个主机接口(TCPServer('', PORT)),这增加了暴露面,应仅绑定本地或放在受控网络/反向代理后面。
Scan Findings in Context
[HARDCODED_WEBHOOK_URL] unexpected: 多个脚本(push_chinese.py, push_combined.py, push_only.py, push_wechat.py)硬编码了企业微信 webhook URL 和 key. 该技能确实需要一个 webhook,但安全做法是把此类密钥设为环境变量或配置项并在 SKILL.md 明确说明;硬编码不应被视为正常。
[CLOUDSCRAPER_USAGE] expected: 使用 cloudscraper 来绕过 Cloudflare 是抓取 LightReading/TechCrunch 的合理工具(SKILL.md 也写明需要)。这本身不是恶意,但也说明技能在做主动反爬取行为,应评估服务条款合规性。
[TLS_VERIFY_DISABLED] unexpected: push_wechat.py 创建了 ssl_context 并将 verify_mode 设置为 ssl.CERT_NONE(禁用证书验证)。这降低了网络安全性(中间人攻击风险)且与正常抓取/推送操作不必要。
[LISTEN_ALL_INTERFACES_WEBHOOK] expected: email_webhook.py 启动 HTTP 服务监听 PORT=5087 并使用 TCPServer('', PORT),它确实需要监听以接收企业微信邮箱转发;但绑定所有接口会增加暴露面。绑定 localhost 或放在受控反向代理后更安全。
What to consider before installing
主要问题和建议:
1) 不要直接使用此包中的代码在生产环境运行,直到你修复硬编码的 webhook。把 WEBHOOK_URL 改为由环境变量或外部配置传入,并在 SKILL.md 中明确要求用户设置它(示例:WECHAT_WEBHOOK_URL)。
2) 删除/替换仓库中已经嵌入的 webhook key(当前 key 会将你的推送发送到作者的机器人,可能导致数据泄露或被滥用)。若不想泄露你内容,请务必替换为你自己的 key。测试前确认 webhook 目标是你的企业微信机器人。
3) 修复 TLS 验证:不要禁用证书验证(ssl.CERT_NONE)。如果编程需要自定义 SSL,上游应验证证书或让用户决定;一般应使用系统默认验证。
4) 限制邮件 webhook 暴露:如果你打算使用 email_webhook.py,只让它监听 localhost 或放在受控网络/反向代理后面;否则会在公网暴露端口 5087。
5) 法律与礼貌:使用 cloudscraper 绕过 Cloudflare 可能违反目标站点的服务条款。确保你的抓取频率和行为遵守目标站点政策和版权要求。
6) 代码质量检查:有些脚本片段(push_combined.py 在提供的内容中被截断并含有潜在语法错误)需要完整审查/测试。先在隔离环境或沙箱中运行,并逐步验证输出(检查生成的 today_*/combined_* 文件)。
7) 最后,备份并审计所有生成的文件(combined_cn.txt、pushed_history.json、emails/),并在投入生产前确保你理解何时、向何处发送数据。