huynhhongan2005/Adversarial-Prompt-Injection-Firewall-for-LLMs
GitHub: huynhhongan2005/Adversarial-Prompt-Injection-Firewall-for-LLMs
一个用于在提示进入大语言模型前检测并拦截提示注入风险的语义防火墙原型项目。
Stars: 0 | Forks: 0
# 大语言模型语义防火墙
在将提示发送给大语言模型之前,检测并处理提示注入的原型项目。
## 1) 本项目的作用
本系统接收输入提示,进行风险分类,应用安全策略,仅在内容安全后将其转发给大语言模型。
风险标签:
- safe(安全)
- suspicious(可疑)
- malicious(恶意)
策略动作:
- allow(允许)
- sanitize(净化)
- block(阻止)
## 2) 核心功能
- 提示风险分类(关键词、HF、自动)
- 支持错拼的模糊匹配(近似相似提示)
- 可配置的关键词规则(带权重评分的多语言)
- 策略引擎(保守阈值 `min_safe_confidence`)
- FastAPI 端点:`/health`、`/classify`、`/process`
- 文档上传端点:在 LLM 前扫描间接提示注入:`/process-document`
- Hugging Face 模型别名(便于切换模型)
- 前端仪表板(快速交互测试)
- 可选使用真实 OpenAI 调用(需设置 `OPENAI_API_KEY`)
- LangChain 摄取脚本(读取文件/URL 并提交提取文本到防火墙 API)
- 运行时可观测字段:
- `request_id`
- `risk_score`
- `timestamp_utc`
- `latency_ms`
- 评估流水线输出:
- `logs/metrics.json`
- `docs/report/Project_Evaluation.md`
- `logs/metrics_hard.json`
- `docs/report/Project_Evaluation_Hard.md`
- `docs/report/Evaluation_Comparison.md`
## 3) 项目结构(当前)
- `src/`
- `api_server.py`:FastAPI 服务
- `app.py`:CLI 流程 + 流程编排
- `classifier.py`:提示分类器
- `policy.py`:允许/净化/阻止规则
- `llm_client.py`:OpenAI 或模拟输出
- `evaluate.py`:指标生成
- `generate_prompts.py`:自动数据集生成
- `playground.py`:手动逐步演练
- `frontend/`
- `index.html`、`styles.css`、`app.js`
- `tests/`
- `test_api_endpoints.py`
- `test_prompts.json`
- `auto_prompts.json`
- `hard_prompts.json`
- `docs/`
- `project/`:运行指南
- `report/`:评估与最终报告
- `workflow/`:项目流程文档
- `logs/`
- 运行时日志与指标(本地产物)
- `data/`
- `keyword_rules_multilingual.json`:关键词模式的多语言意图/目标/上下文规则配置
- `scripts/`
- 可选的 Linux Shell 脚本
## 4) 为何 `firewall.log` 不在 GitHub 上
`firewall.log` 在运行时生成并被 Git 显式忽略。
来自 `.gitignore`:
- `logs/*.log`
- `logs/*.json`
原因:
- 避免提交嘈杂的运行时产物
- 避免泄露本地测试内容或敏感痕迹
- 保持仓库整洁、可审查
如果你想在仓库中保留示例日志,请创建独立的脱敏文件(例如:`docs/report/sample_firewall_log.md`),而不是跟踪原始运行时日志。
## 5) 快速启动(Windows,按步骤执行)
详细操作手册:`docs/project/Runbook_Windows.md`
1. 创建并激活虚拟环境。
```
python -m venv .venv
.venv\Scripts\activate.bat
```
2. 安装依赖。
```
python -m pip install --upgrade pip
pip install -r requirements.txt
```
3. 配置 OpenAI 密钥(可选,用于真实 LLM)。
```
copy .env.example .env
```
编辑 `.env` 并设置:
```
OPENAI_API_KEY=YOUR_REAL_KEY
```
4. 启动 API 服务。
```
uvicorn api_server:app --app-dir src --host 127.0.0.1 --port 8000
```
5. 在另一个终端启动前端。
```
python -m http.server 5500 --directory frontend
```
6. 打开浏览器:
- `http://127.0.0.1:5500`
## 6) 运行时流程(易于理解)
1. 用户输入提示
2. 分类器返回 `label + confidence + reason`
3. 策略将标签转换为动作
4. 若动作为允许/净化,提示进入 LLM
5. 系统返回输出与元数据
6. 事件记录到本地日志文件
## 7) API 端点
- `GET /health`:仅服务健康检查
- `GET /models/hf`:列出支持的 HF 模型别名
- `POST /classify`:仅分类
- `POST /process`:完整流程(分类 -> 策略 -> LLM)
- `POST /process-document`:上传文本文档并运行间接注入扫描 + 策略 + LLM
文档界面:
- `http://127.0.0.1:8000/docs`
当前支持的 HF 模型别名:
- `bart` -> `facebook/bart-large-mnli`
- `roberta-mnli` -> `FacebookAI/roberta-large-mnli`
- `deberta-zeroshot` -> `MoritzLaurer/deberta-v3-base-zeroshot-v1.1-all-33`
- `modernbert-zeroshot` -> `MoritzLaurer/ModernBERT-large-zeroshot-v2.0`
- `multilingual` -> `joeddav/xlm-roberta-large-xnli`
- `xlmr-xnli` -> `joeddav/xlm-roberta-large-xnli`
- `mdeberta-xnli` -> `MoritzLaurer/mDeBERTa-v3-base-mnli-xnli`
## 8) 测试与评估
API 测试:
```
pytest -q tests/test_api_endpoints.py
```
使用 LangChain 进行间接提示注入演示:
```
python src/langchain_firewall_ingest.py --source-type file --source docs/project/Project_Overview.md --classifier-mode keyword
python src/langchain_firewall_ingest.py --source-type url --source https://example.com --classifier-mode keyword
```
评估:
```
python src/evaluate.py --test tests/test_prompts.json --classifier-mode keyword
python src/evaluate.py --test tests/hard_prompts.json --classifier-mode keyword --out-json logs/metrics_hard.json --out-md docs/report/Project_Evaluation_Hard.md
python src/evaluate_compare.py --baseline-test tests/test_prompts.json --hard-test tests/hard_prompts.json --classifier-mode keyword --out docs/report/Evaluation_Comparison.md
python src/evaluate.py --test tests/keyword_multilingual_prompts.json --classifier-mode keyword --out-json logs/metrics_keyword_multilingual.json --out-md docs/report/Project_Evaluation_Keyword_Multilingual.md
```
可选阈值调整:
```
python src/evaluate.py --test tests/hard_prompts.json --classifier-mode keyword --malicious-intent-threshold 1 --malicious-sensitive-threshold 1 --suspicious-sensitive-threshold 2
```
可选模糊调整:
```
python src/evaluate.py --test tests/hard_prompts.json --classifier-mode keyword --malicious-fuzzy-threshold 0.86 --suspicious-fuzzy-threshold 0.88
```
输出文件:
- `logs/metrics.json`
- `docs/report/Project_Evaluation.md`
- `logs/metrics_hard.json`
- `docs/report/Project_Evaluation_Hard.md`
- `docs/report/Evaluation_Comparison.md`
报告中的追踪细节:
- 显式分类表格(`safe`、`suspicious`、`malicious`)
- 不匹配表(用于快速审计错误预测)
## 9) 若 OpenAI 配额已用完
1. 在 OpenAI 仪表板创建新密钥
2. 替换 `.env` 中的密钥
3. 重启 API 服务
4. 在前端启用“使用真实 LLM”后重新测试
## 10) 当前状态
- API 端点测试:全部通过
- 测试提示集已扩展(`tests/test_prompts.json`)
- 项目已具备课程演示条件,具备清晰的升级路径以支持更难的数据集与更强的生产级防护
标签:AI安全, API安全, AV绕过, Chat Copilot, FastAPI, Hugging Face, IaC 扫描, JSON输出, LangChain, LLM安全防护, OpenAI集成, Prompt安全, SEO词:大模型防护, SEO词:提示注入, SEO词:语义防火墙, 关键词匹配, 内容审核, 前端仪表盘, 多语言支持, 大模型安全, 安全测试框架, 安全策略, 容错匹配, 指标生成, 提示注入防御, 提示词设计, 文档扫描, 权重评分, 模糊匹配, 源代码安全, 评估管道, 语义防火墙, 请求ID, 轻量级, 运行时观测, 逆向工具, 配置文件驱动, 风险分类