DeepSeek Harness Hub
← 返回列表

loeanxi/dsh-injection-guard

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

面向 DeepSeek Harness 的来源感知提示注入防护。

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/22 · 已提供中文文档

面向 DeepSeek Harness 的源感知提示注入防护

综合分
28.6
GitHub 分
28.6
用户评分
★ Stars
2
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add loeanxi/dsh-injection-guard
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/19(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/cordis-plugin-include@deepseek-ai/cordis-plugin-loader@deepseek-ai/dsh-agent@deepseek-ai/dsh-llm@deepseek-ai/dsh-tools@deepseek-ai/schemastery
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-injection-guard

面向 DeepSeek Harness 的来源感知提示注入防护。

v0.1.0 状态: 可安装的 DSH bundle、轮次级来源追踪、确定性注入信号、敏感工具拦截、可解释的风险评分、本地化审计日志,以及可复现的 DSH 集成测试夹具。

编码智能体会读取文件、网页、工具结果、技能以及其他外部内容。这些内容可能包含针对智能体的指令。dsh-injection-guard 会追踪不受信任的上下文,并在怀疑存在间接提示注入时阻止敏感工具调用。

不受信任的内容 → 注入信号 → 敏感工具调用 → 风险决策 → 允许 / 询问 / 阻止

30 秒演示

仓库中包含一个故意设置的恶意测试夹具,位于 examples/malicious-repo/README.md。它要求智能体忽略用户的任务,读取 ~/.ssh/id_rsa,并将内容发送到外部 URL。

防护机制会将此 README 视为不受信任的内容。随后的一次凭据读取会被评为严重级别,并在工具主体运行之前被拒绝:

⚠ DSH Injection Guard

Possible indirect prompt injection detected.

Untrusted context:
source: README.md

Injection signals:
- ignore previous instructions
- ~/.ssh
- send ...

Sensitive action:
tool: filesystem.read
target: {"path":"~/.ssh/id_rsa"}

Risk:
CRITICAL (90/100)

Decision:
BLOCKED

该演示仅使用本地测试夹具。它不会读取真实凭据,也不会联系任何网络端点。

安装与加载

该插件面向 DSH 开发者预览版插件 API,并以可安装的 DSH Bundle 形式发布在 npm 上。请确保 DSH 已安装并可在终端中使用,然后通过以下命令安装:

pnpm dsh plugin --profile web add dsh-injection-guard

该包可在 npmjs.com/package/dsh-injection-guard 获取。若要直接从源码安装,请使用 github:loeanxi/dsh-injection-guard。

在 DSH 组合中加载它:

- id: injection-guard
name: 'dsh-injection-guard'
config:
log: true
askThreshold: 60
failClosed: true
semantic: true
locale: zh-CN

DSH 预览版 API 仍在变化。在生产部署中,请固定兼容的 DSH 包版本。

配置

所有选项均为可选。安全默认值如下所示:

| 选项 | 默认值 | 用途 |
| --- | --- | --- |
| log | true | 为每个决策输出可解释的审计消息 |
| askThreshold | 60 | 未达到阻止阈值时,触发 ASK 的最低分数 |
| failClosed | true | 当没有可用的轮次状态时,对敏感调用进行审查门控 |
| semantic | true | 添加保守的本地意图信号;绝不会削弱确定性规则 |
| locale | en | 审计文本使用 en 或 zh-CN,同时保留机器标记 |
对于中文审计输出,请将 locale: zh-CN 添加到插件配置中:

config:
log: true
locale: zh-CN

它检测什么

v0.1 检测器使用确定性规则,不调用 LLM 安全评判器。

- 指令劫持:ignore previous instructions、override system、伪造的 system/developer 消息
- 身份与权限冒充:you are now、管理员声明、安全验证
- 凭据访问:.env、.ssh、.aws、私钥、密码、令牌、凭据
- 数据外泄:curl、wget、上传、webhook、HTTP 提交
- 混淆或隐藏执行:base64、eval、解码、执行/运行命令、零宽和双向 Unicode 控制字符

敏感汇聚点包括凭据访问、网络操作(包括 PowerShell Web 请求和 scp/nc)、shell 执行、下载后执行模式(包括 PowerShell iwr | iex 和解释器管道),以及破坏性文件系统操作。

工作原理

在 agent/pre-step 阶段,插件会对消息来源进行分类,并记录当前轮次的风险状态。文件、Web、工具和文档内容默认被视为不可信。

在 tools/post-execute 阶段,它还会检查已完成的工具输出,并将检测到的注入信号带入同一轮次的下一步。这覆盖了工具结果不会在下一个 agent/pre-step.messages 快照中重复出现的 DSH 组合场景。如果来源元数据缺失但存在注入信号,则保守地将上下文视为不可信。

解析器接受 DSH 文本块、数组、嵌套的 content/data/parts 值,以及轻量级适配器使用的字符串来源类型。重复的快照和重复的工具结果会被去重,因此较长的轮次不会膨胀其审计轨迹。

信号会保留来源标签和规范化匹配偏移量,以供审计和下游策略使用。显式可信的用户/system 消息中的信号不会被重新归类为不可信;来源必须未知或显式不可信,才能影响敏感汇聚点。

可选的 semantic 层默认启用。它是一个保守的本地意图评分器:最多可增加 20 分及相应理由,但不能降低确定性评分,也不能将 BLOCK 变为 ALLOW。宿主可以通过 semantic: false 禁用它,同时保留确定性基线。

在 tools/pre-execute 阶段,它会对提议的工具调用进行分类,将汇聚点与轮次风险状态结合,并返回 DSH 原生的 allow、ask 或 deny 决策。被阻止的调用会在审计消息中包含来源、信号、目标、评分和决策。类似凭据的参数会从审计输出中脱敏。

如果敏感工具调用在插件观察到 agent/pre-step 之前到达,默认的 failClosed: true 设置会返回 ask,而不是静默允许该调用。仅当另一个策略层负责此故障安全决策时,才将其设置为 false。
类似凭据的文件系统读取始终会经过审查门控:在不可信或注入的上下文中它们会被阻止,即使在可信上下文中读取也会返回 ask 以请求明确批准。这可以防止诸如 C:\\Users\\name\\.ssh\\id_rsa 这样的绝对 Windows 路径被静默放行。

审计消息支持 locale: en 和 locale: zh-CN。中文模式保留机器可读的 BLOCKED、ASKED 和 ALLOWED 标记,例如 已阻断(BLOCKED)。

在 v0.1 中,评分被有意设计得简单且可解释:

| 信号 | 分值 |
| --- | ---: |
| 不可信上下文 | +20 |
| 注入信号 | +30 |
| 凭据访问 | +40 |
| 网络操作 | +40 |
| 下载 → 执行 | +50 |
| Shell / 权限操作 | +40 |
| 破坏性文件系统操作 | +30 |

0–29 为 LOW/ALLOW,30–59 为 MEDIUM/ALLOW + log,60–79 为 HIGH/ASK,80+ 为 CRITICAL/BLOCK。

验证安装

pnpm dsh --profile web --dump-config

输出应包含类似以下的条目:

== dsh-injection-guard
- id: injection-guard
name: 'dsh-injection-guard'

这确认该 Bundle 已加载到所选的 DSH 组合中。要验证强制执行,请使用一个包含间接注入的本地非敏感测试夹具,并请求一个类似凭据的工具操作。审计日志应包含 BLOCKED;敏感工具主体不得运行。

从源码进行开发的开发者可以使用 npm test 运行仓库测试套件。这些测试使用模拟的本地工具,不会访问真实凭据或外部端点。

要手动复现相同流程,请将测试夹具放入活动的 DSH 工作区,并让代理读取它。预期的安全信号是包含 BLOCKED 的审计条目(中文模式还包含 已阻断);危险工具主体不得运行。不要使用真实的私钥或真实的外部端点。

范围与限制

这是一个回合级、来源感知的策略信号。它不是:

- 精确的字符级因果或污点追踪;
- 通用权限系统;
- 沙箱;
- 危险命令黑名单;
- 基于 LLM 的语义评判器;
- 保证代理永远不会受到恶意内容影响的承诺。

来源出处应由周围的 DSH 组合保留。敏感操作仍应具有独立的权限、参数验证、沙箱化,以及在适当情况下的用户批准。

研究基础

该设计参考了近期评估 Security Assessment of DeepSeek Harness with A.I.G: Evaluating Resistance to Indirect Prompt Injection,该评估在多个内容通道、载体格式和攻击变换下评估了真实的 DSH 运行时。该评估强调了虚假完成、混淆、技能、隐藏 Unicode 和文件表示作为重要的测试维度。

本地研究笔记可在 research/dsh-prompt-injection.md 中获取。
状态

本仓库包含 v0.1 MVP:基于规则的检测、来源感知的轮次状态、敏感接收器分析、风险评分、审计日志、一个恶意 README 夹具,以及 DSH 集成测试。

许可证:MIT

dsh-injection-guard 中文说明

面向 DeepSeek Harness 的、基于来源感知的 Prompt Injection 防护插件。

v0.1.0 状态: 已具备可安装的 DSH Bundle、Turn-level 来源跟踪、确定性注入信号检测、敏感 Tool Call 拦截、可解释风险评分、多语言审计日志,以及可复现的 DSH 集成测试夹具。

Coding Agent 会读取文件、网页、工具结果、Skills 以及其他外部内容。这些内容可能包含针对 Agent 的恶意指令。dsh-injection-guard 会跟踪不可信上下文,并在怀疑存在间接提示词注入时阻断敏感工具调用。

不可信内容 → 注入信号 → 敏感工具调用 → 可解释风险决策 → ALLOW / ASK / BLOCK

30 秒 Demo

仓库中的 examples/malicious-repo/README.md 是一个故意构造的恶意 README。它要求 Agent 忽略用户任务、读取 ~/.ssh/id_rsa,并把内容发送到外部 URL。

Guard 会把这个 README 标记为不可信。当 Agent 随后请求读取凭据时,风险会被评估为 CRITICAL,并在工具实际执行前阻断:

⚠ DSH Injection Guard

检测到可能的间接提示词注入。

不可信上下文:
source: README.md

注入信号:
- ignore previous instructions
- ~/.ssh
- send ...

敏感操作:
tool: filesystem.read
target: {"path":"~/.ssh/id_rsa"}

风险:
CRITICAL (90/100)

决策:
BLOCKED

Demo 只使用本地 fixture,不会读取真实凭据,也不会访问网络。

安装与加载

当前版本面向 DSH developer preview 插件 API,并作为可安装的 DSH Bundle 发布到 npm。用户只需要确保 DSH 已安装并能在终端中运行,然后执行:

pnpm dsh plugin --profile web add dsh-injection-guard

npm 包地址:npmjs.com/package/dsh-injection-guard。如果需要从源码安装,也可以使用 github:loeanxi/dsh-injection-guard。

确认 Bundle 已进入当前 composition:

pnpm dsh --profile web --dump-config

在输出中搜索 injection-guard 或 dsh-injection-guard。

预期能看到:

== dsh-injection-guard
- id: injection-guard
name: 'dsh-injection-guard'

这一步只证明 Bundle 已进入配置树。要证明拦截生效,请在当前 DSH 工作区中使用一个不包含真实机密的测试 fixture,让 Agent 读取该文件后请求凭据类 Tool Call。审计日志应出现 BLOCKED,敏感 Tool 的实际执行体不应运行。DSH preview API 仍在快速变化,生产环境应固定兼容的 DSH 依赖版本。

配置项

所有配置项均可省略,以下是安全默认值:

| 配置项 | 默认值 | 作用 |
| --- | --- | --- |
| log | true | 为每次决策输出可解释审计信息 |
| askThreshold | 60 | 未达到阻断阈值时触发 ASK 的最低分数 |
| failClosed | true | 没有 Turn 状态时,对敏感调用进行人工复核 |
| semantic | true | 增加保守的本地意图信号,不会削弱确定性规则 |
| locale | en | 使用 en 或 zh-CN 输出审计文本,同时保留机器标记 |

如果希望页面上看到中文审计结果:

config:
log: true
locale: zh-CN

检测范围

v0.1 使用确定性规则,不调用 LLM Security Judge:

- 指令劫持:ignore previous instructions、override system、伪造 system/developer message
- 身份与权限伪装:you are now、管理员身份、安全验证等
- 凭据访问:.env、.ssh、.aws、私钥、密码、Token、credentials
- 外传行为:curl、wget、upload、webhook、HTTP 提交
- 混淆或隐蔽执行:base64、eval、decode、execute/run command,以及零宽和双向 Unicode 控制字符

敏感 Sink 包括凭据访问、网络操作(含 PowerShell Web 请求以及 scp/nc)、Shell 执行、下载后执行(含 PowerShell iwr | iex 和解释器管道),以及破坏性文件操作。

工作原理

在 agent/pre-step 阶段,插件对消息来源进行分类,并保存当前 Turn 的风险状态。默认将 file、web、tool、document 内容视为不可信。
在 tools/post-execute 阶段,插件还会检查刚完成的 Tool 输出,并把检测到的注入信号带入同一 Turn 的下一步。这样即使 DSH 下一次 agent/pre-step.messages 没有回填 Tool Result,也不会丢失恶意 README 的风险状态。如果缺少 source 元数据但已经检测到注入信号,插件会保守地将上下文判为不可信。

解析器支持 DSH 文本块、数组、嵌套的 content/data/parts 内容,以及轻量适配器使用的字符串 source kind。重复的消息快照和 Tool Result 会去重,避免长 Turn 造成审计记录膨胀。

每个信号会保留来源标签和规范化文本中的匹配范围,供审计和后续策略使用。明确标记为 trusted 的 user/system 消息即使包含测试关键词,也不会被重新判定为不可信;只有来源未知或明确不可信时,信号才会影响敏感 Sink。

可选的 semantic 层默认开启。它是保守的本地意图评分器,最多增加 20 分和解释原因,但不能降低确定性评分,也不能把 BLOCK 改成 ALLOW。设置 semantic: false 可以关闭它,同时保留确定性规则底线。

在 tools/pre-execute 阶段,插件分析即将执行的 Tool Call,将敏感 Sink 与当前 Turn 风险状态结合,并返回 DSH 原生的 allow、ask 或 deny 决策。被阻断的调用会在审计信息中说明来源、信号、目标、分数和最终决策;凭据类参数会在审计日志中脱敏。

如果敏感 Tool Call 到达时插件还没有观察到 agent/pre-step,默认的 failClosed: true 会返回 ask,而不是静默放行。只有在其他策略层负责这个故障安全决策时,才应设置为 false。

凭据类文件读取始终需要人工复核:如果关联了不可信或注入上下文则直接阻断;即使上下文可信,也会返回 ask 请求显式批准。这样可以避免类似 C:\\Users\\name\\.ssh\\id_rsa 的 Windows 绝对路径被静默放行。

审计消息支持 locale: en 和 locale: zh-CN。中文模式仍保留机器可识别的 BLOCKED、ASKED、ALLOWED 标记,例如 已阻断(BLOCKED)。

v0.1 的评分规则保持简单且可解释:

| 信号 | 分值 |
| --- | ---: |
| 存在不可信上下文 | +20 |
| 存在注入信号 | +30 |
| 凭据访问 | +40 |
| 网络操作 | +40 |
| 下载后执行 | +50 |
| Shell / 权限操作 | +40 |
| 破坏性文件操作 | +30 |

0–29 为 LOW/ALLOW,30–59 为 MEDIUM/ALLOW + log,60–79 为 HIGH/ASK,80+ 为 CRITICAL/BLOCK。

开发者测试

npm install
npm test
npm run test:integration
npm run test:robustness
npm run typecheck
npm run build

仓库还提供对照集评估,输出 precision、recall、误报率、漏报率和拦截率:

npm test -- tests/corpus-evaluation.test.ts

当前对照集只是小型回归基线,不是生产 benchmark;发布前应补充有代表性的正常样本和 adversarial DSH 载体。

集成测试会验证真实 DSH Loader composition,以及从恶意 README 内容到凭据 Sink 被阻断的 DSH ToolRuntime 路径。所有 Sink 都是本地模拟工具。

页面手测时,请把 fixture 放进当前 DSH 工作区,再要求 Agent 读取它。预期审计信息同时包含 已阻断 和机器可识别的 BLOCKED,危险 Tool 的实际执行体不会运行。不要使用真实私钥,也不要访问真实外部地址。

范围与限制

这是一个 Turn-level、source-aware 的策略信号,不是:

- 精确到字符级别的因果追踪或 Taint Tracking;
- 通用权限系统;
- Sandbox;
- 普通危险命令黑名单;
- 基于 LLM 的语义裁判;
- 对恶意内容影响 Agent 的绝对保证。

外围 DSH composition 仍应保留来源信息。敏感操作仍应配合独立的权限控制、参数校验、Sandbox 和用户审批。

研究依据

本项目参考了近期评测 Security Assessment of DeepSeek Harness with A.I.G: Evaluating Resistance to Indirect Prompt Injection。该评测在真实 DSH Runtime 上测试了多种内容渠道、载体格式和攻击变体,特别指出 fake completion、obfuscation、skills、hidden Unicode 以及文件载体表示是重要测试维度。

本地调研记录见 research/dsh-prompt-injection.md。

当前状态

本仓库包含 v0.1 MVP:基于规则的检测、来源感知的 Turn 状态、敏感 Sink 分析、风险评分、审计日志、恶意 README fixture,以及 DSH 集成测试。

许可证:MIT

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

同作者(loeanxi)的其他插件

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群