yashchavan24/prompt-injection-detector
GitHub: yashchavan24/prompt-injection-detector
基于机器学习的 LLM prompt injection 检测中间件,在用户输入到达模型前实时筛查恶意指令覆盖攻击,并重点关注跨数据集泛化性能。
Stars: 0 | Forks: 0
# Prompt Injection 检测器
一个基于机器学习的系统,用于检测集成 LLM 的应用程序中的 prompt injection 攻击,作为网络安全专业 B.Tech 最后一年项目构建。
**在线演示:** https://prompt-injection-detector-g0v0.onrender.com
(免费托管层 —— 如果实例因不活动而休眠,首次请求可能需要长达 50 秒的时间。)
## 概述
集成到实际应用程序(聊天机器人、编程助手、浏览器代理)中的大型语言模型容易受到 prompt injection 的攻击——这是一种恶意输入覆盖模型预期指令的攻击。本项目构建了一个轻量级的中间件分类器,可以在 prompt 到达 LLM 之前对其进行筛查,实时阻止或标记可能的注入尝试。
与大多数已发表的检测器不同(它们在同一数据集评估下报告接近完美的准确率),本项目明确测量了在**跨数据集泛化**下的性能——在一组攻击模式上进行训练,并在完全未见过的模式上进行测试——以反映真实的部署条件,而不是数据集带来的假象。
## 关键结果
| 评估 | 结果 |
|---|---|
| 同一数据集(随机划分,2 个来源混合) | 99.4% AUROC |
| 跨数据集泛化(2 个来源) | 平均约 0.72 AUROC |
| 3 路跨数据集泛化(3 个来源) | 0.71-0.97 AUROC(高度依赖于来源) |
| 对抗性压力测试 —— 明显的攻击 | 100% (13/13) |
| 对抗性压力测试 —— 新颖/改写的攻击(2 来源模型) | 62.5% (5/8) |
| 对抗性压力测试 —— 新颖/改写的攻击(3 来源模型) | 87.5% (7/8) |
完整的方法论、文献综述和分析在项目报告中。
## 架构
- **检测模型(研究/本地):** Sentence embeddings (all-MiniLM-L6-v2) + 手工制作的启发式特征(祈使词密度、角色扮演/覆盖标记)-> Random Forest 分类器
- **检测模型(部署/轻量级):** TF-IDF 特征 + 启发式特征 -> Logistic Regression 分类器(选择用于部署以适应免费层的内存限制)
- **后端:** FastAPI,具有 `/check`(对任何文本进行评分)和 `/chat`(受保护的聊天机器人演示,通过 Groq 的 API 连接到 Llama 3.1)endpoint
- **前端:** 原生 HTML/CSS/JS,深色主题 UI,显示判定结果、概率和触发的信号
- **浏览器扩展:** Chrome 扩展(Manifest V3),具有弹出式检查器和注入到 ChatGPT/Copilot 页面中的浮动“检查注入”按钮
## 使用的数据集
- [deepset/prompt-injections](https://huggingface.co/datasets/deepset/prompt-injections)
- [xTRam1/safe-guard-prompt-injection](https://huggingface.co/datasets/xTRam1/safe-guard-prompt-injection)
- [jayavibhav/prompt-injection](https://huggingface.co/datasets/jayavibhav/prompt-injection)(采样子集)
## 仓库结构
app.py 完整的本地应用程序(基于 embeddings 的模型,需要 torch)
app_deploy.py 轻量级部署应用程序(基于 TF-IDF 的模型,无需 torch)
requirements.txt 部署(轻量)版本的依赖项
scripts/ 数据流水线、训练和评估脚本
models/ 训练好的模型工件 (.pkl)
static/ Web UI(检测器页面 + 受保护的聊天机器人演示)
extension/ Chrome 扩展(Manifest V3)
## 本地运行
python -m venv venv
venv\Scripts\Activate.ps1
pip install -r requirements.txt
uvicorn app_deploy:app --reload
然后打开 http://127.0.0.1:8000
如果要改用完整的基于 embeddings 的模型,请额外安装 `torch` 和 `sentence-transformers`,并运行 `uvicorn app:app --reload`。
## 局限性
- 该检测器专门训练用于捕获 prompt injection / 指令覆盖模式——它不是通用的内容审核过滤器(如测试中所示,非注入尝试的直接有害请求可能会通过)。
- 跨数据集泛化仍然是一个未解决的难题;性能会根据用于训练和测试的数据集组合的不同而有很大差异。
- 轻量级部署模型(基于 TF-IDF)尚未在与完整的基于 embeddings 的模型相同的跨数据集/对抗性基准上进行评估。
标签:Apex, DLL 劫持, Web安全, 大语言模型, 安全防护, 提示词注入检测, 文本分类, 机器学习, 蓝队分析, 逆向工具