Trusted — Risk Score 5/100
Last scan:2 days ago Rescan
5 /100
baoyu-post-to-wechat
Posts content to WeChat Official Account (微信公众号) via API or Chrome CDP
这是一个合法的微信公众号文章发布工具,所有能力与声明一致,无恶意行为,无阴影功能。
Skill Namebaoyu-post-to-wechat
Duration60.4s
Enginepi
Safe to install
此技能安全可用,可以直接使用。

Findings 4 items

Severity Finding Location
Low
shell执行能力未在SKILL.md中声明
脚本使用spawnSync执行'npx bun'命令来调用内部子脚本(md-to-wechat.ts),但SKILL.md的Script Directory表格仅说明使用{baseDir}/scripts/<name>.ts,未明确声明会执行shell命令。这是内部实现细节,属于轻微瑕疵。
const result = spawnSync('npx', args, { stdio: ['inherit', 'pipe', 'pipe'], cwd: baseDir })
→ 在SKILL.md的Script Directory表格注释中添加说明,表明脚本内部会使用spawnSync调用npx bun执行子脚本。
scripts/wechat-api.ts:282:282
Low
vendor目录包含未版本锁定的第三方依赖
scripts/vendor/baoyu-md/ 和 scripts/vendor/baoyu-chrome-cdp/ 是完整第三方库源码,未使用package-lock.json锁定版本。baoyu-md的package.json中dependencies无版本锁定。
"dependencies": {"marked": "^12.0.0", "sharp": "^0.33.0"}
→ 为vendor依赖添加package-lock.json以确保可复现性(非安全风险,属于工程最佳实践)。
scripts/vendor/baoyu-md/package.json:1
Info
Chrome启动参数包含反自动化检测标志
scripts/cdp.ts在启动Chrome时添加了'--disable-blink-features=AutomationControlled'参数。这是为了防止WeChat网站检测到自动化控制,但可能被用于规避反爬措施。
extraArgs: ['--disable-blink-features=AutomationControlled', '--start-maximized']
→ 确认这是为了绕过WeChat网站的反爬机制(非安全风险,因为该skill本身就用于自动化发布文章)。
scripts/cdp.ts:89:89
Info
预扫描标记的硬编码IP需确认
预扫描标记了scripts/vendor/baoyu-md/src/extensions/alert.ts:157存在硬编码IP 138.112.25.25。经代码审查,alert.ts为GFM Alert扩展实现,未发现该IP。该标记可能为预扫描误报或代码版本差异。
未在当前代码版本中发现硬编码IP
→ 建议重新扫描确认是否存在该IP,或确认预扫描版本与当前版本差异。
scripts/vendor/baoyu-md/src/extensions/alert.ts:157
ResourceDeclaredInferredStatusEvidence
Filesystem WRITE WRITE ✓ Aligned SKILL.md: scripts/目录说明; scripts/wechat-api.ts: fs.readFileSync/writeFileSync
Network READ READ ✓ Aligned SKILL.md声明访问mp.weixin.qq.com和api.weixin.qq.com; scripts/wechat-api.ts:46-56 fetc…
Shell NONE WRITE ✓ Aligned scripts/wechat-api.ts:282 spawnSync调用npx bun; scripts/wechat-browser.ts: spawnSy…
Browser WRITE WRITE ✓ Aligned SKILL.md声明需要Chrome; scripts/cdp.ts: Chrome CDP协议控制浏览器
Clipboard WRITE WRITE ✓ Aligned scripts/copy-to-clipboard.ts: Swift/AppKit复制图片; scripts/paste-from-clipboard.ts:…
Environment READ READ ✓ Aligned scripts/wechat-extend-config.ts: loadCredentials读取WECHAT_APP_ID/WECHAT_APP_SECRE…
Skill Invoke READ READ ✓ Aligned SKILL.md声明支持CLI工具和内部脚本调用
Database NONE NONE 无数据库访问
1 High 27 findings
📡
High IP Address 硬编码 IP 地址
138.112.25.25
scripts/vendor/baoyu-md/src/extensions/alert.ts:157
🔗
Medium External URL 外部 URL
https://mp.weixin.qq.com
SKILL.md:322
🔗
Medium External URL 外部 URL
https://api.weixin.qq.com/cgi-bin/draft/add?access_token=ACCESS_TOKEN
SKILL.md:387
🔗
Medium External URL 外部 URL
https://gemini.google.com/app
scripts/vendor/baoyu-chrome-cdp/src/index.test.ts:242
🔗
Medium External URL 外部 URL
https://softonit.ru/
scripts/vendor/baoyu-md/src/code-themes/1c-light.min.css:6
🔗
Medium External URL 外部 URL
https://highlightjs.org/
scripts/vendor/baoyu-md/src/code-themes/default.min.css:6
🔗
Medium External URL 外部 URL
https://creativecommons.org/licenses/by-sa/4.0
scripts/vendor/baoyu-md/src/code-themes/nnfx-dark.min.css:6
🔗
Medium External URL 外部 URL
http://www.w3.org/2000/svg
scripts/vendor/baoyu-md/src/constants.ts:79
🔗
Medium External URL 外部 URL
https://marked.js.org/
scripts/vendor/baoyu-md/src/extensions/alert.ts:23
🔗
Medium External URL 外部 URL
https://groups.google.com/g/mathjax-users/c/zThKffrrCvE?pli=1
scripts/vendor/baoyu-md/src/extensions/katex.ts:26
🔗
Medium External URL 外部 URL
https://www.plantuml.com/plantuml
scripts/vendor/baoyu-md/src/extensions/plantuml.ts:7
🔗
Medium External URL 外部 URL
https://plantuml.com/text-encoding
scripts/vendor/baoyu-md/src/extensions/plantuml.ts:35
🔗
Medium External URL 外部 URL
https://talk.commonmark.org/t/proper-ruby-text-rb-syntax-support-in-markdown/2279
scripts/vendor/baoyu-md/src/extensions/ruby.ts:5
🔗
Medium External URL 外部 URL
https://www.w3.org/TR/ruby/
scripts/vendor/baoyu-md/src/extensions/ruby.ts:6
🔗
Medium External URL 外部 URL
https://cdn-doocs.oss-cn-shenzhen.aliyuncs.com/npm/highlightjs/$
scripts/vendor/baoyu-md/src/utils/languages.ts:80
🔗
Medium External URL 外部 URL
https://mp.weixin.qq.com/
scripts/wechat-agent-browser.ts:6
🔗
Medium External URL 外部 URL
https://api.weixin.qq.com/cgi-bin/token
scripts/wechat-api.ts:54
🔗
Medium External URL 外部 URL
https://api.weixin.qq.com/cgi-bin/material/add_material
scripts/wechat-api.ts:55
🔗
Medium External URL 外部 URL
https://api.weixin.qq.com/cgi-bin/draft/add
scripts/wechat-api.ts:56
🔗
Medium External URL 外部 URL
https://mmbiz.qpic.cn
scripts/wechat-api.ts:179
📧
Info Email 邮箱地址
[email protected]
scripts/vendor/baoyu-md/src/code-themes/1c-light.min.css:4
📧
Info Email 邮箱地址
[email protected]
scripts/vendor/baoyu-md/src/code-themes/agate.min.css:3
📧
Info Email 邮箱地址
[email protected]
scripts/vendor/baoyu-md/src/code-themes/an-old-hope.min.css:3
📧
Info Email 邮箱地址
[email protected]
scripts/vendor/baoyu-md/src/code-themes/default.min.css:4
📧
Info Email 邮箱地址
[email protected]
scripts/vendor/baoyu-md/src/code-themes/felipec.min.css:3
📧
Info Email 邮箱地址
[email protected]
scripts/vendor/baoyu-md/src/code-themes/nnfx-dark.min.css:4
📧
Info Email 邮箱地址
[email protected]
scripts/vendor/baoyu-md/src/code-themes/tokyo-night-dark.min.css:5

File Tree

125 files · 404.2 KB · 10772 lines
TypeScript 40f · 8425L CSS 78f · 1408L Markdown 4f · 900L JSON 3f · 39L
├─ 📁 references
│ ├─ 📁 config
│ │ └─ 📝 first-time-setup.md Markdown 203L · 5.2 KB
│ ├─ 📝 article-posting.md Markdown 95L · 2.5 KB
│ └─ 📝 image-text-posting.md Markdown 94L · 2.8 KB
├─ 📁 scripts
│ ├─ 📁 vendor
│ │ ├─ 📁 baoyu-chrome-cdp
│ │ │ ├─ 📁 src
│ │ │ │ ├─ 📜 index.test.ts TypeScript 307L · 9.3 KB
│ │ │ │ └─ 📜 index.ts TypeScript 523L · 16.8 KB
│ │ │ └─ 📋 package.json JSON 9L · 140 B
│ │ └─ 📁 baoyu-md
│ │ ├─ 📁 src
│ │ │ ├─ 📁 code-themes
│ │ │ │ ├─ 📄 1c-light.min.css CSS 8L · 1.1 KB
│ │ │ │ ├─ 📄 a11y-dark.min.css CSS 6L · 1.1 KB
│ │ │ │ ├─ 📄 a11y-light.min.css CSS 6L · 1.1 KB
│ │ │ │ ├─ 📄 agate.min.css CSS 19L · 1.3 KB
│ │ │ │ ├─ 📄 an-old-hope.min.css CSS 8L · 961 B
│ │ │ │ ├─ 📄 androidstudio.min.css CSS 1L · 611 B
│ │ │ │ ├─ 📄 arduino-light.min.css CSS 1L · 844 B
│ │ │ │ ├─ 📄 arta.min.css CSS 1L · 673 B
│ │ │ │ ├─ 📄 ascetic.min.css CSS 1L · 454 B
│ │ │ │ ├─ 📄 atom-one-dark-reasonable.min.css CSS 1L · 1.2 KB
│ │ │ │ ├─ 📄 atom-one-dark.min.css CSS 1L · 856 B
│ │ │ │ ├─ 📄 atom-one-light.min.css CSS 1L · 856 B
│ │ │ │ ├─ 📄 brown-paper.min.css CSS 1L · 656 B
│ │ │ │ ├─ 📄 codepen-embed.min.css CSS 1L · 600 B
│ │ │ │ ├─ 📄 color-brewer.min.css CSS 1L · 631 B
│ │ │ │ ├─ 📄 dark.min.css CSS 1L · 625 B
│ │ │ │ ├─ 📄 default.min.css CSS 8L · 1.1 KB
│ │ │ │ ├─ 📄 devibeans.min.css CSS 6L · 1.1 KB
│ │ │ │ ├─ 📄 docco.min.css CSS 1L · 837 B
│ │ │ │ ├─ 📄 far.min.css CSS 1L · 669 B
│ │ │ │ ├─ 📄 felipec.min.css CSS 6L · 1.2 KB
│ │ │ │ ├─ 📄 foundation.min.css CSS 1L · 779 B
│ │ │ │ ├─ 📄 github-dark-dimmed.min.css CSS 8L · 1.2 KB
│ │ │ │ ├─ 📄 github-dark.min.css CSS 9L · 1.3 KB
│ │ │ │ ├─ 📄 github.min.css CSS 9L · 1.3 KB
│ │ │ │ ├─ 📄 gml.min.css CSS 1L · 787 B
│ │ │ │ ├─ 📄 googlecode.min.css CSS 1L · 835 B
│ │ │ │ ├─ 📄 gradient-dark.min.css CSS 1L · 1.1 KB
│ │ │ │ ├─ 📄 gradient-light.min.css CSS 1L · 1.1 KB
│ │ │ │ ├─ 📄 grayscale.min.css CSS 1L · 1.6 KB
│ │ │ │ ├─ 📄 hybrid.min.css CSS 1L · 897 B
│ │ │ │ ├─ 📄 idea.min.css CSS 1L · 906 B
│ │ │ │ ├─ 📄 intellij-light.min.css CSS 1L · 1.0 KB
│ │ │ │ ├─ 📄 ir-black.min.css CSS 1L · 694 B
│ │ │ │ ├─ 📄 isbl-editor-dark.min.css CSS 1L · 971 B
│ │ │ │ ├─ 📄 isbl-editor-light.min.css CSS 1L · 952 B
│ │ │ │ ├─ 📄 kimbie-dark.min.css CSS 1L · 652 B
│ │ │ │ ├─ 📄 kimbie-light.min.css CSS 1L · 652 B
│ │ │ │ ├─ 📄 lightfair.min.css CSS 1L · 831 B
│ │ │ │ ├─ 📄 lioshi.min.css CSS 1L · 715 B
│ │ │ │ ├─ 📄 magula.min.css CSS 1L · 642 B
│ │ │ │ ├─ 📄 mono-blue.min.css CSS 1L · 631 B
│ │ │ │ ├─ 📄 monokai-sublime.min.css CSS 1L · 826 B
│ │ │ │ ├─ 📄 monokai.min.css CSS 1L · 814 B
│ │ │ │ ├─ 📄 night-owl.min.css CSS 1L · 1.4 KB
│ │ │ │ ├─ 📄 nnfx-dark.min.css CSS 9L · 1.4 KB
│ │ │ │ ├─ 📄 nnfx-light.min.css CSS 9L · 1.4 KB
│ │ │ │ ├─ 📄 nord.min.css CSS 1L · 2.6 KB
│ │ │ │ ├─ 📄 obsidian.min.css CSS 1L · 882 B
│ │ │ │ ├─ 📄 panda-syntax-dark.min.css CSS 1L · 1.1 KB
│ │ │ │ ├─ 📄 panda-syntax-light.min.css CSS 1L · 1.0 KB
│ │ │ │ ├─ 📄 paraiso-dark.min.css CSS 1L · 637 B
│ │ │ │ ├─ 📄 paraiso-light.min.css CSS 1L · 637 B
│ │ │ │ ├─ 📄 pojoaque.min.css CSS 1L · 814 B
│ │ │ │ ├─ 📄 purebasic.min.css CSS 1L · 734 B
│ │ │ │ ├─ 📄 qtcreator-dark.min.css CSS 1L · 815 B
│ │ │ │ ├─ 📄 qtcreator-light.min.css CSS 1L · 810 B
│ │ │ │ ├─ 📄 rainbow.min.css CSS 1L · 826 B
│ │ │ │ ├─ 📄 routeros.min.css CSS 1L · 862 B
│ │ │ │ ├─ 📄 school-book.min.css CSS 1L · 664 B
│ │ │ │ ├─ 📄 shades-of-purple.min.css CSS 1L · 854 B
│ │ │ │ ├─ 📄 srcery.min.css CSS 1L · 795 B
│ │ │ │ ├─ 📄 stackoverflow-dark.min.css CSS 12L · 1.2 KB
│ │ │ │ ├─ 📄 stackoverflow-light.min.css CSS 12L · 1.3 KB
│ │ │ │ ├─ 📄 sunburst.min.css CSS 1L · 950 B
│ │ │ │ ├─ 📄 tokyo-night-dark.min.css CSS 7L · 1.2 KB
│ │ │ │ ├─ 📄 tokyo-night-light.min.css CSS 7L · 1.2 KB
│ │ │ │ ├─ 📄 tomorrow-night-blue.min.css CSS 1L · 648 B
│ │ │ │ ├─ 📄 tomorrow-night-bright.min.css CSS 1L · 648 B
│ │ │ │ ├─ 📄 vs.min.css CSS 1L · 640 B
│ │ │ │ ├─ 📄 vs2015.min.css CSS 1L · 1.1 KB
│ │ │ │ ├─ 📄 xcode.min.css CSS 1L · 945 B
│ │ │ │ └─ 📄 xt256.min.css CSS 1L · 765 B
│ │ │ ├─ 📁 extensions
│ │ │ │ ├─ 📜 alert.ts TypeScript 284L · 19.3 KB
│ │ │ │ ├─ 📜 footnotes.ts TypeScript 89L · 2.4 KB
│ │ │ │ ├─ 📜 index.ts TypeScript 10L · 280 B
│ │ │ │ ├─ 📜 infographic.ts TypeScript 119L · 3.6 KB
│ │ │ │ ├─ 📜 katex.ts TypeScript 162L · 4.6 KB
│ │ │ │ ├─ 📜 markup.ts TypeScript 87L · 2.3 KB
│ │ │ │ ├─ 📜 plantuml.ts TypeScript 289L · 8.1 KB
│ │ │ │ ├─ 📜 ruby.ts TypeScript 125L · 3.9 KB
│ │ │ │ ├─ 📜 slider.ts TypeScript 73L · 2.9 KB
│ │ │ │ └─ 📜 toc.ts TypeScript 74L · 2.1 KB
│ │ │ ├─ 📁 themes
│ │ │ │ ├─ 📄 base.css CSS 39L · 816 B
│ │ │ │ ├─ 📄 default.css CSS 434L · 7.7 KB
│ │ │ │ ├─ 📄 grace.css CSS 136L · 2.5 KB
│ │ │ │ ├─ 📄 modern.css CSS 465L · 8.2 KB
│ │ │ │ └─ 📄 simple.css CSS 129L · 2.7 KB
│ │ │ ├─ 📁 utils
│ │ │ │ └─ 📜 languages.ts TypeScript 238L · 8.1 KB
│ │ │ ├─ 📜 cli.ts TypeScript 163L · 5.7 KB
│ │ │ ├─ 📜 constants.ts TypeScript 84L · 3.3 KB
│ │ │ ├─ 📜 content.test.ts TypeScript 93L · 2.3 KB
│ │ │ ├─ 📜 content.ts TypeScript 105L · 3.1 KB
│ │ │ ├─ 📜 document.test.ts TypeScript 140L · 4.3 KB
│ │ │ ├─ 📜 document.ts TypeScript 206L · 6.7 KB
│ │ │ ├─ 📜 extend-config.ts TypeScript 57L · 2.3 KB
│ │ │ ├─ 📜 html-builder.test.ts TypeScript 71L · 2.5 KB
│ │ │ ├─ 📜 html-builder.ts TypeScript 142L · 4.4 KB
│ │ │ ├─ 📜 images.test.ts TypeScript 79L · 2.5 KB
│ │ │ ├─ 📜 images.ts TypeScript 156L · 4.1 KB
│ │ │ ├─ 📜 index.ts TypeScript 10L · 307 B
│ │ │ ├─ 📜 render.ts TypeScript 43L · 1.2 KB
│ │ │ ├─ 📜 renderer.test.ts TypeScript 64L · 2.0 KB
│ │ │ ├─ 📜 renderer.ts TypeScript 442L · 13.3 KB
│ │ │ ├─ 📜 themes.ts TypeScript 62L · 1.8 KB
│ │ │ └─ 📜 types.ts TypeScript 78L · 1.8 KB
│ │ └─ 📋 package.json JSON 21L · 450 B
│ ├─ 📜 cdp.ts TypeScript 255L · 8.2 KB
│ ├─ 📜 check-permissions.ts TypeScript 251L · 8.6 KB
│ ├─ 📜 copy-to-clipboard.ts TypeScript 380L · 11.9 KB
│ ├─ 📜 md-to-wechat.ts TypeScript 170L · 4.7 KB
│ ├─ 📋 package.json JSON 9L · 208 B
│ ├─ 📜 paste-from-clipboard.ts TypeScript 194L · 5.5 KB
│ ├─ 📜 wechat-agent-browser.ts TypeScript 363L · 11.1 KB
│ ├─ 📜 wechat-api.ts TypeScript 664L · 21.0 KB
│ ├─ 📜 wechat-article.ts TypeScript 787L · 32.0 KB
│ ├─ 📜 wechat-browser.ts TypeScript 741L · 27.7 KB
│ └─ 📜 wechat-extend-config.ts TypeScript 245L · 7.7 KB
└─ 📝 SKILL.md Markdown 508L · 19.7 KB

Dependencies 3 items

PackageVersionSourceKnown VulnsNotes
marked ^12.0.0 scripts/vendor/baoyu-md/package.json No 无版本锁定
sharp ^0.33.0 scripts/vendor/baoyu-md/package.json No 无版本锁定
baoyu-chrome-cdp workspace scripts/vendor/baoyu-chrome-cdp/package.json No 本地vendor包

Security Positives

✓ 声明与行为高度一致:所有文件系统、网络、浏览器、剪贴板操作均与文档声明的功能(微信公众号发布)相符
✓ 凭证处理安全:微信API凭证(app_id/app_secret)仅从env/配置文件读取后直接发送到微信官方API,无中间存储或外传
✓ 无恶意行为模式:未发现base64编码管道、eval()调用、裸IP请求、凭证收割、环境变量遍历、远程脚本下载等高危指标
✓ Chrome配置文件隔离:使用独立profile目录而非用户Chrome配置,防止会话混淆
✓ 多账户支持设计合理:支持通过EXTEND.md管理多个微信公众号账户,凭证按账户隔离
✓ 影子功能检测阴性:73.2%恶意skill的阴影功能在此skill中未发现
✓ 代码质量高:TypeScript类型安全,内部模块化(vendor/分第三方库),测试覆盖(baoyu-chrome-cdp/src/index.test.ts)