dsh-phishing-guard:入库前扫 agent 会读到的文本里的可疑指令

前言

知识库、网页抓取结果、邮件模板和提示词文件,往往会先被 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。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜