{"skill":{"slug":"safe-web-fetch-for-save-token","displayName":"Safe Web Fetch for Save Token","summary":"安全的智能网页抓取技能，节省 50-80% Token。替代内置 web_fetch，自动使用 Jina Reader 清洗服务获取干净 Markdown。内置 URL 白名单验证、SSL 强制验证、敏感数据检测，防止 SSRF 和数据泄露。","description":"---\nname: safe-web-fetch-for-save-token\ndescription: 安全的智能网页抓取技能，节省 50-80% Token。替代内置 web_fetch，自动使用 Jina Reader 清洗服务获取干净 Markdown。内置 URL 白名单验证、SSL 强制验证、敏感数据检测，防止 SSRF 和数据泄露。\nmetadata:\n  openclaw:\n    requires:\n      bins: [python3]\n---\n\n# Safe Web Fetch\n\n安全的智能网页内容获取技能。保留原版的核心功能（Token 节省 50-80%），但增加多层安全防护。\n\n## 核心功能\n\n- **智能清洗**: 自动使用 Jina Reader 获取干净 Markdown\n- **Token 优化**: 去除广告、导航栏等噪音，节省 50-80% Token\n- **安全防护**: \n  - ✅ 强制 SSL 验证（不跳过）\n  - ✅ URL 白名单验证（阻止内网/私有 IP）\n  - ✅ 敏感数据检测（不发送包含 API Key/Token 的页面）\n  - ✅ 可配置允许列表\n\n## 使用方式\n\n### 基本用法\n\n```bash\n# 获取清洗后的 Markdown\npython3 {baseDir}/scripts/safe_fetch.py \"https://example.com/article\"\n\n# JSON 格式输出（包含元信息）\npython3 {baseDir}/scripts/safe_fetch.py \"https://example.com/article\" --json\n\n# 查看安全配置\npython3 {baseDir}/scripts/safe_fetch.py --show-config\n```\n\n### 在 Agent 中使用\n\n当用户需要获取网页内容时：\n\n```\n用户: \"帮我查一下 https://example.com/article 的内容\"\nAgent 应该:\n1. 运行: python3 ~/.openclaw/skills/safe-web-fetch/scripts/safe_fetch.py \"https://example.com/article\"\n2. 获得清洗后的 Markdown 内容\n```\n\n## 安全特性\n\n### 1. URL 白名单验证\n\n阻止以下危险 URL：\n- 私有 IP 地址（127.0.0.1, 192.168.x.x, 10.x.x.x, 172.16-31.x.x）\n- localhost, *.local\n- 内部域名（*.internal, *.localdomain）\n- file://, ftp://, data:// 等非 HTTP 协议\n\n### 2. 敏感数据检测\n\n发送前检测页面内容，拒绝发送包含：\n- API Keys（`api_key=`, `apikey=`, `key=`）\n- Access Tokens（`access_token=`, `token=`）\n- Bearer Tokens（`Bearer `, `Authorization: `）\n- AWS Keys（`AKIA`, `aws_`）\n- Private Keys（`-----BEGIN.*PRIVATE KEY-----`）\n\n### 3. 强制 SSL 验证\n\n不会禁用 SSL 证书验证，确保：\n- 连接真实的服务器\n- 防止中间人攻击\n- 证书错误时拒绝连接\n\n### 4. 可配置允许列表\n\n在 `config.json` 中配置：\n\n```json\n{\n  \"allowed_domains\": [\"example.com\", \"docs.example.com\"],\n  \"blocked_domains\": [\"ads.example.com\"],\n  \"max_content_size\": 10485760,\n  \"timeout\": 30\n}\n```\n\n## 输出格式\n\n```json\n{\n  \"success\": true,\n  \"url\": \"https://r.jina.ai/http://example.com/article\",\n  \"original_url\": \"https://example.com/article\",\n  \"content\": \"# Article Title\\n\\nClean markdown content here...\",\n  \"source\": \"jina\",\n  \"content_length\": 1234,\n  \"error\": null\n}\n```\n\n## 降级策略\n\n1. **Jina Reader**（首选）- 免费，支持好\n2. **原始内容**（兜底）- 直连获取，本地清洗\n\n## 与原版区别\n\n| 特性 | 原版 smart-web-fetch | 本技能 safe-web-fetch |\n|------|---------------------|----------------------|\n| SSL 验证 | ❌ 禁用 | ✅ 强制 |\n| URL 白名单 | ❌ 无 | ✅ 有 |\n| 敏感数据检测 | ❌ 无 | ✅ 有 |\n| SSRF 防护 | ❌ 无 | ✅ 有 |\n| 修改 Agent 配置 | ⚠️ 会修改 | ❌ 不修改 |\n| Token 节省 | 50-80% | 50-80% |\n\n## 优势\n\n- 🚀 **Token 节省**: 去除广告、导航栏等噪音\n- 🔒 **安全第一**: 多层防护，防止数据泄露和 SSRF\n- 🆓 **零成本**: 使用免费服务，无需 API Key\n- 📝 **干净输出**: 纯 Markdown，无需额外解析\n- ⚙️ **可配置**: 允许列表、超时、大小限制均可配置\n\n## 配置文件\n\n创建 `config.json` 进行自定义配置：\n\n```json\n{\n  \"allowed_domains\": [],\n  \"blocked_domains\": [],\n  \"max_content_size\": 10485760,\n  \"timeout\": 30,\n  \"user_agent\": \"SafeWebFetch/1.0\"\n}\n```\n\n---\n\n**安全提示**: 此技能不会修改 Agent 配置，不会自动接管 web_fetch。如需优先使用本技能，请手动在任务中调用。\n","tags":{"fetch":"1.0.0","latest":"1.0.0","security":"1.0.0","token-save":"1.0.0","web":"1.0.0"},"stats":{"comments":0,"downloads":613,"installsAllTime":23,"installsCurrent":2,"stars":0,"versions":1},"createdAt":1772689201924,"updatedAt":1778491730325},"latestVersion":{"version":"1.0.0","createdAt":1772689201924,"changelog":"首次发布：安全的智能网页抓取技能，节省 50-80% Token，内置 SSRF 防护、SSL 强制验证、敏感数据检测","license":null},"metadata":{"setup":[],"os":null,"systems":null},"owner":{"handle":"bg1avd","userId":"s17e1m5ac1rppw87gfc2cfare9846fyp","displayName":"Rao Lin","image":"https://avatars.githubusercontent.com/u/16436148?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780089760461}}