安装验证:运行验证通过 (L5) · 验证于 dsh 0.2.1-rc.2 · 验证日期 安装验证详情 →
功能介绍AI
通过 webfetch 工具和 toutiao-reader 技能,获取网页并读取头条文章全文。
- 提供 webfetch 工具获取网页文章全文
- 内置 toutiao-reader 专注头条阅读
- 封装真实网页阅读经验,可直接复用
能力标签为 AI 推断或 README 规则抽取(见角标),词表受限、未经安装验证;AI = 推断,README = 原文关键词。
安装
dsh plugin --profile web add github:RyanShen3/dsh-toutiao-reader安装方式: GitHub · 运行验证通过 (L5)
验证与兼容性
按插件版本分组:每张卡是该插件版本实测过的 dsh 版本与安装兼容结论(L5 优先)。只列真测过的组合——未列出 = 未实测,不推定兼容。L1–L3 为插件级静态档(与 dsh 版本无关,各 dsh 行同值):在行内「验证等级」格里与 L4/L5 并列显示、标注「静态」,证据体为插件级单份、随行内「查看检查项与证据」出现,不在各版本重复存储。
External credentials(插件级):未检测到
依据:1 条要求、覆盖 1 个 @deepseek-ai/dsh-* 子包。 看原始区间
^0.1.0-rc.6 ×1
✗ 当前 dsh 0.2.1-rc.2 不在支持范围内 —— 官方安装门控会直接拒绝装(incompatible-version)。
强行安装需精确豁免一次:dsh plugin allow-version dsh-toutiao-reader@0.1.0 0.2.1-rc.2(豁免记在本机 profile,本站不假定你是否已豁免)
能否正常运行是另一件事 → 见下方实测矩阵(L1–L5)。
| 插件版本 \ dsh | dsh 0.2.1-rc.2 当前 | dsh 0.2.1-alpha.4 | dsh 0.2.1-alpha.2 | dsh 0.2.0-rc.2 | dsh 0.2.0-rc.1 |
|---|---|---|---|---|---|
| 820b75 | ✓ | ✓ | ✓ | ✓ | ✓ |
820b75github✓ 运行验证通过 112026-10-19
https://github.com/RyanShen3/dsh-toutiao-reader
✓dsh 0.2.1-rc.2当前2026-10-19L5 · 运行验证通过
- • Node.js: v24.14.0
- • DSH: 0.2.1-rc.2
- • 被测插件工件: github · https://github.com/RyanShen3/dsh-toutiao-reader(版本未标注)
ID: dsh-toutiao-reader@820b75@dsh0.2.1-rc.2 · 档位: l4-sandbox
签发:2026-10-19 · 有效至:2026-10-26
查看检查项与证据
已在加载器目录树中激活(150 个条目)
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✓dsh 0.2.1-alpha.42026-10-16L5 · 运行验证通过
- • Node.js: v24.14.0
- • DSH: 0.2.1-alpha.4
- • 被测插件工件: github · https://github.com/RyanShen3/dsh-toutiao-reader(版本未标注)
ID: dsh-toutiao-reader@820b75@dsh0.2.1-alpha.4 · 档位: l4-sandbox
签发:2026-10-16 · 有效至:2026-10-23
查看检查项与证据
已在加载器目录树中激活(150 个条目)
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✓dsh 0.2.1-alpha.22026-10-11L5 · 运行验证通过
- • Node.js: v24.14.0
- • DSH: 0.2.1-alpha.2
- • 被测插件工件: github · https://github.com/RyanShen3/dsh-toutiao-reader(版本未标注)
ID: dsh-toutiao-reader@820b75@dsh0.2.1-alpha.2 · 档位: l4-sandbox
签发:2026-10-11 · 有效至:2026-10-18
查看检查项与证据
已在加载器目录树中激活(150 个条目)
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✓dsh 0.2.0-rc.22026-10-09L5 · 运行验证通过
- • Node.js: v24.14.0
- • DSH: 0.2.0-rc.2
- • 被测插件工件: github · https://github.com/RyanShen3/dsh-toutiao-reader(版本未标注)
ID: dsh-toutiao-reader@820b75@dsh0.2.0-rc.2 · 档位: l4-sandbox
签发:2026-10-09 · 有效至:2026-10-16
查看检查项与证据
已在加载器目录树中激活(150 个条目)
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✓dsh 0.2.0-rc.12026-09-29L5 · 运行验证通过
- • Node.js: v24.14.0
- • DSH: 0.2.0-rc.1
- • 被测插件工件: github · https://github.com/RyanShen3/dsh-toutiao-reader(版本未标注)
ID: dsh-toutiao-reader@820b75@dsh0.2.0-rc.1 · 档位: l4-sandbox
签发:2026-09-29 · 有效至:2026-10-06
查看检查项与证据
已在加载器目录树中激活(150 个条目)
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✓dsh 0.1.7-rc.22026-09-25L5 · 运行验证通过
- • Node.js: v24.14.0
- • DSH: 0.1.7-rc.2
- • 被测插件工件: github · https://github.com/RyanShen3/dsh-toutiao-reader(版本未标注)
ID: dsh-toutiao-reader@820b75@dsh0.1.7-rc.2 · 档位: l4-sandbox
签发:2026-09-25 · 有效至:2026-10-02
查看检查项与证据
已在加载器目录树中激活(150 个条目)
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
○dsh 0.1.7-rc.12026-09-23未实测
- • Node.js: v24.14.0
- • DSH: 0.1.7-rc.1
- • 被测插件工件: github · https://github.com/RyanShen3/dsh-toutiao-reader(版本未标注)
ID: dsh-toutiao-reader@820b75@dsh0.1.7-rc.1 · 档位: l4-sandbox
签发:2026-09-23 · 有效至:2026-09-30
查看检查项与证据
该档位在这次扫描中未执行。
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✓dsh 0.1.6-alpha.22026-09-20L5 · 运行验证通过
- • Node.js: v24.14.0
- • DSH: 0.1.6-alpha.2
- • 被测插件工件: github · https://github.com/RyanShen3/dsh-toutiao-reader(版本未标注)
ID: dsh-toutiao-reader@820b75@dsh0.1.6-alpha.2 · 档位: l3-fullscan
签发:2026-09-20 · 有效至:2026-09-27
查看检查项与证据
已在加载器目录树中激活(150 个条目)
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✓dsh 0.1.6-alpha.12026-09-16L5 · 运行验证通过
- • Node.js: v24.14.0
- • DSH: 0.1.6-alpha.1
- • 被测插件工件: github · https://github.com/RyanShen3/dsh-toutiao-reader(版本未标注)
ID: dsh-toutiao-reader@820b75@dsh0.1.6-alpha.1 · 档位: l4-sandbox
签发:2026-09-16 · 有效至:2026-09-23
查看检查项与证据
已在加载器目录树中激活(150 个条目)
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✓dsh 0.1.5-rc.22026-09-11L5 · 运行验证通过
- • Node.js: v24.14.0
- • DSH: 0.1.5-rc.2
- • 被测插件工件: github · https://github.com/RyanShen3/dsh-toutiao-reader(版本未标注)
ID: dsh-toutiao-reader@820b75@dsh0.1.5-rc.2 · 档位: l4-sandbox
签发:2026-09-11 · 有效至:2026-09-18
查看检查项与证据
已在加载器目录树中激活(150 个条目)
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✓dsh 0.1.3-alpha.22026-09-09L5 · 运行验证通过
- • Node.js: v24.14.0
- • DSH: 0.1.3-alpha.2
- • 被测插件工件: github · https://github.com/RyanShen3/dsh-toutiao-reader(版本未标注)
ID: dsh-toutiao-reader@820b75@dsh0.1.3-alpha.2 · 档位: l4-sandbox
签发:2026-09-09 · 有效至:2026-09-16
查看检查项与证据
已在加载器目录树中激活(150 个条目)
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✓版本史前2026-10-04L5 · 运行验证通过
- • Node.js: v24.14.0
- • DSH: unknown
- • 被测插件工件: github · https://github.com/RyanShen3/dsh-toutiao-reader(版本未标注)
ID: dsh-toutiao-reader@820b75@dshunknown · 档位: l4-sandbox
签发:2026-10-04 · 有效至:2026-10-11
查看检查项与证据
已在加载器目录树中激活(150 个条目)
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
作者徽章
将官方徽章嵌入你的 README,展示插件的安全与安装检测状态:
`[](https://www.dsh.so/artifact/dsh-toutiao-reader/)``[](https://www.dsh.so/artifact/dsh-toutiao-reader/)``[](https://www.dsh.so/artifact/dsh-toutiao-reader/)``[](https://www.dsh.so/artifact/dsh-toutiao-reader/)``[](https://www.dsh.so/artifact/dsh-toutiao-reader/)``[](https://www.dsh.so/artifact/dsh-toutiao-reader/)`安全报告
两层自动化检查,都不是人工审核:静态扫描(逐插件规则判定)与模型驱动的动态安全审计(只覆盖静态判定 warn 及以上的插件子集,不执行插件代码)。
静态扫描 低,动态审计最高 中,按「取更严者」→ 总评级 中。
v0.1.0dsh 清单0.1.0git2026-10-210.1.0版本一致clean · gitvet 为 AST 静态扫描(npm 发布物或 git 源码)。
静态发现(7 条)
- 警告childProcess · code-exec
lib/fetch.js:236const p = spawn(browser, args, { stdio: ['ignore', out, 'ignore'] }) - 警告childProcess · code-exec
lib/fetch.js:247try { spawn('taskkill', ['/pid', String(p.pid), '/T', '/F'], { stdio: 'ignore' }) } catch { /* 超时兜底清理 */ } - 警告netIp · network
lib/fetch.js:149const list = await (await fetch('http://127.0.0.1:' + cdpPort + '/json/list', { signal: AbortSignal.timeout(3000) })).json() - 警告netIp · network
lib/fetch.js:161const r = await fetch('http://127.0.0.1:' + cdpPort + '/json/new?about:blank', { method, signal: AbortSignal.timeout(5000) }) - 警告fsWrite · files
lib/fetch.js:100const writeCache = (c) => { try { fs.writeFileSync(cachePath, JSON.stringify(c, null, 2)) } catch { /* 缓存失败不影响抓取 */ } } - 警告fsWrite · files
lib/fetch.js:154try { fs.writeFileSync(tabFile, tab.id) } catch { /* tab 复用只是优化 */ } - 警告fsWrite · files
lib/index.js:137fs.writeFileSync(dest, r.title + '\n\n' + full, 'utf8')
展开 4 条审计发现
- mediumwebfetch 可对任意 http(s) 主机发起请求,包含 localhost 与内网地址
lib/fetch.js:271只校验 URL 协议,从不检查主机名/IP。该工具因此可作为 SSRF 原语:可读取 http://127.0.0.1:*/json/list(插件自身的 CDP 端点)、云元数据 169.254.169.254、内网管理后台,并把响应正文返回给模型、还可写入文件。唯一屏障是模型对 URL 的选择,而这可被此前抓取页面中的提示注入操纵。
- mediumoutfile 接受任意绝对路径,可将抓取到的(可被攻击者影响的)文本写到宿主可写的任意位置
lib/index.js:137resolveOutfile 对绝对路径原样返回(第 42 行 `if (path.isAbsolute(p)) return p`),写入前还会 mkdirSync(path.dirname(dest), { recursive: true })。内容为页面标题加全文,完全由提供该 URL 的一方控制。成功对 agent 实施提示注入的页面即可把自己的文本覆盖到 shell 配置、开机启动脚本或编辑器配置上,且目录会自动创建,未限制在配置的 workspace 内。
- medium常驻无头浏览器长期暴露在无鉴权的 CDP 端口上,共享临时 profile 且不校验归属
lib/fetch.js:133startDaemon 启动的 detached Edge/Chrome 从不退出,在 127.0.0.1:<cdpPort> 上无令牌监听,而 getTab() 无条件信任该端口的应答(pid 文件写了但从不校验)。先占端口的本地进程可通过 Page.navigate 收到用户请求抓取的所有 URL,并向模型上下文返回任意内容。profile 目录(os.tmpdir()/webfetch-profile)还会累积用户访问过的登录站点 Cookie,并被其他脚本复用。
- low固定临时文件名以 'w' 方式打开,会跟随预先创建的符号链接(不安全临时文件)
lib/fetch.js:233tmpHtml 是可预测路径(os.tmpdir()/webfetch-dom.html),且未使用 O_EXCL/O_NOFOLLOW 打开。在共享临时目录下,其他本地用户可预先创建该名字的符号链接,使 dump-dom 输出截断/覆盖其指向的任意文件。由于该插件主要面向 Windows(%TEMP% 按用户隔离),影响较低。
webfetch 可请求任意 http(s) 地址(含内网/localhost)并把全文写入任意绝对路径;常驻无鉴权的 CDP 端口 9333。
口径:动态审计只会把风险往严重里判,不会把风险降下来(只升不降,不构成豁免);模型判错时由人工复核撤回,撤回后回到静态判定。合并判定 = 两层中更严的那一个。
免责声明:静态扫描与动态安全审计都是自动化分析,不构成安全保证。安装前请自行审查。
活跃度
最近提交 2026-08-30 · 活跃度:稳定
• 仓库创建: 2026-08-29
• 星标: ★ 0 · 复刻: 0
• 健康度: 稳定 — 近 90 天有提交
来源
作者 README
GitHub 原文 ↗展示作者仓库中的原始 README 内容,实时抓取、未做改写;优先加载中文版(README.zh-CN.md 等),无中文版时回退英文。
