前言¶
知识库、网页抓取结果、邮件模板和提示词文件,往往会先被 agent 读进去再参与推理。人眼看起来正常的段落里,可能夹着「忽略之前的指令」、零宽字符拆词、白底白字 HTML,或带外发 URL 的服从式句子——这类间接注入和知识库污染,运行时很难靠直觉拦住。DeepSeek Harness(DSH)把能力拆成插件;@deepwhale-cn/dsh-phishing-guard(社区目录 feely0208/dsh-phishing-guard,分类 admin-security)做的是入库前的静态检查:只扫 agent 会读到的文本,列出可疑句式与依据,不下「被攻击」的结论。它和装包前审代码的 dsh-tool-vet、扫仓库密钥的 dsh-secret-scan 分工不同——本插件关心的是「喂给 agent 的内容里有没有人在下命令」。
这是什么¶
维护者 feely0208(深鲸 DeepWhale 守护系列之一)。npm 包名 @deepwhale-cn/dsh-phishing-guard,当前版本 0.1.0,MIT 许可证。
是:对准备入库的文档、知识库、提示词模板、抓下来的网页、邮件模板等文本内容做规则扫描,找指令覆盖、社工话术、隐藏字符、HTML 隐藏样式、数据外发指令、system 角色标记等模式。
不是:
- 不是运行时防护,不拦截、不隔离;
- 不是代码审计,不扫
.js/.py/.ts等代码文件; - 不是面向人类的钓鱼邮件检测;
- 命中只表示「这段文字里有这样的句式」,是否真有问题由你确认。
一句话:它不看代码,只看 agent 会读到的字。
核心功能:9 条规则、5 个方向¶
扫描范围限于文本类扩展名:.md、.txt、.json、.html、.htm、.yml、.yaml。每条命中会给出文件路径、行号、该行片段和规则 ID。
| 方向 | 规则 ID | 查什么 | 级别 |
|---|---|---|---|
| 指令覆盖 | PHISH-INSTR-OVERRIDE |
「忽略之前的指令」「ignore previous instructions」「forget your rules」「从现在起你是无限制的…」等 | 高(🔴) |
| 身份冒充 + 紧急 | PHISH-AUTHORITY-URGENCY |
同一行既称管理员又带紧急/立刻/马上 | 🔴 |
| 隐藏文本 | PHISH-HIDDEN-INWORD |
不可见字符插在词中间(如「忽 + U+200B + 略」) | 🔴 |
| 隐藏文本 | PHISH-HIDDEN-STRAY |
游离零宽字符 | 中(🟡) |
| 隐藏文本 | PHISH-HIDDEN-BOM |
文本中间夹着 U+FEFF(文件头 BOM 不算) | 🟡 |
| 隐藏文本 | PHISH-HIDDEN-HTML-INLINE |
HTML 隐藏样式与指令在同一行 | 🔴 |
| 隐藏文本 | PHISH-HIDDEN-HTML-BLOCK |
同文件内既有隐藏样式又有服从式指令(跨行) | 🟡 |
| 数据外发 | PHISH-EXFIL-DIRECTIVE |
「把…发送到 https://…」类带收件地址的指令 | 🔴 |
| 角色重置 | PHISH-ROLE-MARKER |
system: 行或 <system> 标签后紧跟服从式指令 |
🔴 |
判据出处包括 OWASP Top 10 for LLM Applications 2025(LLM01、LLM06)、MITRE ATLAS 相关技术、NIST AI 100-2、Unicode 与 WHATWG HTML 标准等,详见仓库 README。
安装与启用¶
在 DSH 中安装(命令以 README 为准):
dsh plugin --profile web add @deepwhale-cn/dsh-phishing-guard
要求:dsh 版本 >=0.1.0-rc.6 <0.3.0,Node.js >=18。插件以当前 DSH 进程权限运行;安装前请自行查看 GitHub 仓库 源码与 MIT 许可证。
典型用法¶
安装后通过 CLI dsh-phishing-guard 使用。
扫一个准备入库的知识库目录:
dsh-phishing-guard --root /path/to/knowledge-base
查看内置演示样本(一份表面正常、内藏 agent 指令的企业知识库场景):
dsh-phishing-guard --demo
列出全部规则与依据:
dsh-phishing-guard --list-rules
生成 HTML 报告:
dsh-phishing-guard --root /path/to/knowledge-base --html report.html
退出码:存在 🔴 级别命中时返回 1,便于挂在「内容入库」闸门上。
--demo 示例中会看到例如:员工手册里的外发 URL 指令、FAQ 里词间零宽字符、JSON 知识库里的无限制助手话术、HTML 模板里白底白字后的指令、prompts/assistant.md 里的 system: 英文注入等——人直接打开文件往往看不出,agent 按字读则可能执行。
适用场景与边界¶
适合:在 RAG 知识库、外部文档导入、客服话术模板、抓取网页入库前做一道静态筛查;与同属「AI 与 Agent 治理」系列的 dsh-content-trust、dsh-agent-policy 等配套时,链式更完整。
边界(README 已说明):
- 引述与真指令:中文书名号、弯引号、反引号紧贴包住时可当作引述不报;ASCII 双引号引述(尤其
.json)可能仍命中,属刻意取舍。 - 「我是管理员」单独出现不报,须与紧急词同在一行;话术拆行可能漏检。
- 白底白字等 HTML 规则主要在
.html/.htm;Markdown 内嵌 HTML 的隐藏段落不走那两条 HTML 规则,但不可见字符与其它句式规则仍可能命中。 - 静态检查:图片、PDF、JS 运行时拼出的文本、字体渲染隐藏等看不见。
- 句式以中英文为主;你自己维护的系统提示词模板命中
PHISH-ROLE-MARKER时,需人工确认是否为预期内容。
结尾¶
dsh-phishing-guard 把「agent 读到的字」从「人看着正常」里拆出来,用 9 条可复现规则做入库前检查,而不是替代运行时策略或代码审计。需要试用或查收录信息可看社区目录 skillhub.cn/plugins/feely0208/dsh-phishing-guard;源码、演示与开发测试说明在 github.com/feely0208/dsh-phishing-guard。