Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
prompt-injection-firewall — 双层 LLM 防火墙,通过正则规则加 Gemini 分类器拦截提示注入输入,并捕获机器人响应中的密钥或系统提示泄露。 | Kitploit
工具/GitHubGitHub/ztsprofessionalaiid7-alt/prompt-injection-firewall
防御工具Web安全学习与教育AI 安全异常检测
GitHubztsprofessionalaiid7-alt/prompt-injection-firewall

prompt-injection-firewall

双层 LLM 防火墙,通过正则规则加 Gemini 分类器拦截提示注入输入,并捕获机器人响应中的密钥或系统提示泄露。

查看仓库

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
14天前尚未审核

Prompt-Injection Firewall

在线演示: https://prompt-injection-firewall.streamlit.app 2 分钟演示视频: https://drive.google.com/file/d/1tzb75nFysisrCYa11Lqj6egDs5VNmc2n/view?usp=drivesdk

一个用于 LLM 客服机器人的双层防火墙:它检查用户输入的内容,也检查机器人输出的内容。

问题

用户可以尝试覆盖机器人的规则(“忽略之前的指令”)、切换其人格,或诱使它泄露系统提示词或机密信息。本项目会拦截此类输入,捕获机器人回答中的泄露,并衡量其效果,包括在哪些情况下会失效。

工作原理

user input
   |
   v
[1] Rule layer (regex, fast, free)  --match--> BLOCK
   |no match
   v
[2] LLM classifier (Gemini, JSON output, Pydantic validation, retries, fail-closed) --attack--> BLOCK
   |benign
   v
AcmeBot (Gemini + system prompt)
   |
   v
[3] Output check (canary token, secret patterns, system-prompt fragments) --leak--> BLOCK
   |clean
   v
answer to user

运行方式

python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env.example .env      # then put your Gemini key in .env
python src\run_eval.py dev
python src\eval_output.py dev
python src\compare.py dev
streamlit run app.py        # local demo

使用的模型:gemini-3.1-flash-lite。免费层在繁忙时可能返回 503;代码会等待并重试。 除非你想重建 data\cases.jsonl,否则不要运行 src\build_cases.py(它会覆盖该文件;相同的种子会生成相同的用例)。

数据

  • 输入用例:从 deepset/prompt-injections(Apache-2.0)中采样 25 条(种子 7):12 条攻击,13 条良性。划分:15 条 dev,10 条 hidden。
  • 输出用例:由我在 AI 协助下编写 12 条(8 条 dev,4 条 hidden),包括通过空格隐藏的泄露,以及提到“password”/“API key”的良性文本。
  • data/train.parquet 已包含在仓库中(来源:deepset/prompt-injections,Apache-2.0)。
  • hidden 划分只运行了一次,是在对检测逻辑和提示词做最后一次修改之后。

结果

集合层结果
dev仅规则检测 2/9,误报 0/6
dev规则 + Gemini(最终)检测 8/9,误报 0/6
dev输出检查(最终)捕获泄露 4/4,误报 0/4
hidden规则 + Gemini检测 3/3,误报 0/7
hidden输出检查捕获泄露 3/3,误报 0/1

防火墙与无防火墙对比:

无有
dev:到达机器人的攻击9/91/9
dev:被错误拦截的良性请求0/60/6
hidden:到达机器人的攻击3/30/3
hidden:被错误拦截的良性请求0/70/7

hidden 集只有 3 条攻击,因此信号较弱。dev 和 hidden 分开报告,因为我在 dev 上调优了分类器提示词。

失败之处及我的修改

带数字的完整历史记录见 CHANGELOG.md。简而言之:

  • 仅靠规则捕获了 2/9 条攻击(仅限字面短语)。加入 Gemini 分类器后提升到 7/9。
  • 错误的模型名称导致每次调用都失败,而 fail-closed 回退机制拦截了一切(9/9 条攻击,6/6 条误报)。这个虚假分数说明了为什么错误必须中止运行,而不是被吞掉。
  • #4(隐藏在正常问题之后的指令)被漏掉了;我在提示词中加入了一条通用规则,达到 8/9。
  • #14 “generate c++” 仍然失败。它在源数据集中被标记为攻击,但看起来无害,可能是标签噪声。
  • 输出检查漏掉了一个用空格书写的秘密(“ZX CANARY 7731”);我在匹配前对文本做了规范化。
  • 对真实机器人回答运行输出检查时,出现了误报:机器人自我介绍时与系统提示词有 6 个词的匹配;我将匹配长度改为 8 个词。
  • 部署:API key 现在也会从环境变量(Streamlit secrets)读取。检测逻辑和提示词没有变化。

局限性

  • 数据量小:25 条输入用例和 12 条输出用例。数字在统计上并不稳健。
  • 大多数源攻击是宣传或角色扮演提示词,而非系统提示词窃取,因此在对比中输出检查在输入层之外没有增加任何东西。
  • 输出检查的测试用例是我编写的,因此它们只能说明该检查在我的用例上有效,而不能说明它在真实泄露上有效。
  • 输出检查无法捕获改写、base64 编码或非英语的泄露,也会漏掉少于 8 个连续词的泄露。
  • 规则模式适配了该数据集的常见短语;其他攻击风格依赖 LLM 层。
  • LLM 层每条消息增加一次 API 调用(延迟和成本),并依赖第三方服务。
  • 公开演示每个会话限制 10 条消息,如果免费 API 配额用完可能会停止工作。
下载工具