Scan Report
40 /100
xhs-crawler
小红书关键词爬取 Skill — 浏览器模拟搜索 + 飞书推送
Hardcoded Feishu App Secret exposed in both source code and SKILL.md documentation, plus unpinned Python dependencies with no network isolation, constitute undeclared sensitive credential exposure and dependency supply chain risk.
Use with caution
Move Feishu App ID/Secret to environment variables or a .env file, pin all dependency versions (playwright, requests), and remove credentials from SKILL.md before deployment.
Findings 5 items
| Severity | Finding | Location |
|---|---|---|
| High | Feishu App Secret hardcoded and documented | config.py:89 |
| High | No dependency pinning — supply chain risk | package.json:9 |
| Medium | Node.js exec() with arbitrary command injection surface | index.js:122 |
| Medium | Chrome profile directory stored in user home | config.py:18 |
| Low | Pre-scan false positive: IP address misidentified | config.py:46 |
| Resource | Declared | Inferred | Status | Evidence |
|---|---|---|---|---|
| Filesystem | READ | WRITE | ✓ Aligned | cookie_manager.py writes cookie.txt; logs/xhs_crawler.log created; all within sk… |
| Network | READ | READ | ✓ Aligned | requests to xiaohongshu.com (search API + browser), open.feishu.cn (Feishu OpenA… |
| Shell | WRITE | WRITE | ✓ Aligned | index.js uses child_process.exec() to run python script; python itself uses play… |
| Environment | NONE | READ | ✓ Aligned | config.py reads no env vars; but feishu_app_bot.py sends App ID/Secret in POST b… |
1 High 14 findings
High IP Address 硬编码 IP 地址
143.0.0.0 config.py:50 Medium External URL 外部 URL
https://www.xiaohongshu.com/explore auto_login_with_qrcode.py:96 Medium External URL 外部 URL
https://edith.xiaohongshu.com/api/sns/web/v1/search/notes config.py:30 Medium External URL 外部 URL
https://edith.xiaohongshu.com/api/sns/web/v1/feed config.py:31 Medium External URL 外部 URL
https://www.xiaohongshu.com config.py:40 Medium External URL 外部 URL
https://www.xiaohongshu.com/ config.py:43 Medium External URL 外部 URL
https://www.xiaohongshu.com/user/profile cookie_manager.py:82 Medium External URL 外部 URL
https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal feishu_app_bot.py:67 Medium External URL 外部 URL
https://open.feishu.cn/open-apis/im/v1/messages feishu_app_bot.py:109 Medium External URL 外部 URL
https://open.feishu.cn/open-apis/im/v1/images feishu_app_bot.py:222 Medium External URL 外部 URL
https://open.feishu.cn/open-apis/im/v1/chats feishu_app_bot.py:368 Medium External URL 外部 URL
https://www.xiaohongshu.com/explore/ xhs_crawler.py:181 Medium External URL 外部 URL
https://www.xiaohongshu.com/search_result?keyword= xhs_search_with_browser.py:86 Medium External URL 外部 URL
https://open.feishu.cn/ 使用文档.md:67 File Tree
15 files · 94.0 KB · 3138 lines Python 10f · 2525L
Markdown 2f · 420L
JavaScript 1f · 175L
JSON 1f · 17L
Text 1f · 1L
├─
__init__.py
Python
├─
auto_login_with_qrcode.py
Python
├─
config.py
Python
├─
cookie_manager.py
Python
├─
cookie.txt
Text
├─
example_openclaw_skill.py
Python
├─
feishu_app_bot.py
Python
├─
feishu_bot.py
Python
├─
index.js
JavaScript
├─
login.py
Python
├─
package.json
JSON
├─
SKILL.md
Markdown
├─
xhs_crawler.py
Python
├─
xhs_search_with_browser.py
Python
└─
使用文档.md
Markdown
Dependencies 3 items
| Package | Version | Source | Known Vulns | Notes |
|---|---|---|---|---|
playwright | * | pip | No | No version pinned — SKILL.md says 'pip install playwright' without version |
requests | * | pip | No | No version pinned — SKILL.md says 'pip install requests' without version |
node | * | system | No | No Node.js package.json dependencies declared |
Security Positives
✓ All capabilities declared in SKILL.md align with actual implementation — no hidden functionality detected
✓ No base64-encoded payloads, no eval(), no obfuscated JavaScript
✓ No credential harvesting beyond the Feishu app credentials (which are for the bot's own API, not user data theft)
✓ No curl|bash or wget|sh remote script downloads
✓ No access to ~/.ssh, ~/.aws, or other sensitive host credential paths
✓ No reverse shell, no C2 callbacks, no data exfiltration to unknown third-party servers
✓ Playwright import is safely guarded with try/except and PLAYWRIGHT_AVAILABLE flag
✓ Browser automation uses isolated user_data_dir per session for login flow