dsh-qa-browser
github.com/xarleyn/dsh-plugins
v0.4.2
会话与记忆
含混淆或编码代码写入文件动态执行代码
面向 DeepSeek Harness 的会话级 Chromium 运行时。它是 `SPEC-DSH-QA-BROWSER.md` 所描述的 Browser 侧实现;QA Surface 仍是独立的布局宿主。
作者原文(英文)
Session-scoped Playwright browser runtime for DeepSeek Harness and QA Surface
中文简介由 DeepSeek 模型翻译,仅供参考。
deepseekdeepseek-harnessdshdsh-plugincordisbrowserplaywrightqa
检测报告
有一定能力。命中了若干能力模式,大多是插件正常工作时会用到的。
3需留意4一般17未命中
高关注需留意一般
能力清单
- 含混淆或编码代码
obfuscated-code需留意9 处命中lib/client/BrowserRefusals.js:4return (_jsxs("div", { className: "dsh-qa-browser-panel__refusal", "data-testid": "panel-refusal", role: "alert", childr…lib/client/chrome.js:76return (_jsxs("div", { className: "dsh-qa-browser-panel__toolbar", "data-testid": "toolbar-bar", children: [_jsx("button…lib/client/chrome.js:81: "dsh-qa-browser-panel__tool", "data-testid": "toolbar-device", "aria-label": "\u0423\u0441\u0442\u0440\u043E\u0439\u04…lib/client/chrome.js:147} })] }), _jsxs("label", { className: "dsh-qa-browser-panel__device-pick", children: [_jsx("span", { className: "dsh-qa-…- 混淆本身不是恶意,但公开源码里出现大段混淆值得问一句为什么。
- 写入文件
writes-files需留意1 处命中package.json:128"clean": "node -e \"require('node:fs').rmSync('lib', { recursive: true, force: true })\"",- 看写入位置。写自己的配置目录是正常的,写系统目录不是。
- 动态执行代码
dynamic-code需留意1 处命中lib/client.js:138new Function("");- 看 eval / new Function 的入参来自哪里。常量字符串和用户输入是两回事。
- 动态加载模块
dynamic-import一般18 处命中lib/host/providers/playwright.js:503constructor(loadPlaywright = async () => await import("playwright")) {lib/client/BrowserPanel.d.ts:8export declare function BrowserPanel(props: BrowserPanelProps): import("react/jsx-runtime").JSX.Element;lib/client/BrowserRefusals.d.ts:14export declare function BrowserRefusals({ headline, leadMessage, refusals, }: BrowserRefusalsProps): import("react/jsx-r…lib/client/chrome.d.ts:23export declare function BrowserTabStrip({ tabs, selectedId, interactive, onSelect, onClose, onNewTab, }: BrowserTabStrip…- 动态导入本身无害,但会让依赖关系难以静态审阅。
- 接触凭据或密钥
credentials一般4 处命中lib/host/policy.js:105if (target.username !== "" || target.password !== "") {lib/host/policy.js:106throw new QaBrowserError("BROWSER_NAVIGATION_BLOCKED", "Credentials in navigation URLs are not allowed.");README.md:128The QA panel uses the existing DSH Remote transport and QA bearer credential.README.md:129It never embeds the target page in an iframe, persists the credential, or opens- 看它读取哪些凭据、发往哪里。用于登录自己的服务是正常的。
- 读取文件
reads-files一般3 处命中lib/host/providers/playwright.js:44if (!existsSync(options.executablePath)) {lib/host/providers/playwright.js:51if (existsSync(discovered)) {lib/host/providers/playwright.js:61if (existsSync(executablePath)) {- 读文件是绝大多数插件的正常工作方式,本身不构成顾虑。
- 读取环境变量
reads-env一般3 处命中lib/host/providers/playwright.js:15process.env["PROGRAMFILES"],lib/host/providers/playwright.js:16process.env["PROGRAMFILES(X86)"],lib/host/providers/playwright.js:17process.env["LOCALAPPDATA"],- 环境变量里常混有密钥。看它是否把整个 env 都读走。
逐条扫描明细
| 能力 | 标识 | 关注度 | 命中次数 |
|---|---|---|---|
| 含混淆或编码代码 | obfuscated-code | 需留意 | 9 |
| 写入文件 | writes-files | 需留意 | 1 |
| 动态执行代码 | dynamic-code | 需留意 | 1 |
| 动态加载模块 | dynamic-import | 一般 | 18 |
| 接触凭据或密钥 | credentials | 一般 | 4 |
| 读取文件 | reads-files | 一般 | 3 |
| 读取环境变量 | reads-env | 一般 | 3 |
这份报告的口径
扫描读的是包里的源码,全程不执行第三方代码。 本次读了 76 个文件,扫描于 2026-10-14。 命中次数只说明源码里出现过这类调用,不说明行为好坏——一个插件读写文件 500 次和 1 次 都会被记为「读取文件」。这是能力清单,不是信任评分,也不是安全结论: 没扫出来的能力可能只是写法没被规则覆盖。