ElBecerril/Prompt-Guard
GitHub: ElBecerril/Prompt-Guard
这是一款用于检测 AI 系统中 prompt injection 攻击和文本隐写威胁的终端扫描器。
Stars: 0 | Forks: 0
```
██████╗ ██████╗ ██████╗ ███╗ ███╗██████╗ ████████╗
██╔══██╗██╔══██╗██╔═══██╗████╗ ████║██╔══██╗╚══██╔══╝
██████╔╝██████╔╝██║ ██║██╔████╔██║██████╔╝ ██║
██╔═══╝ ██╔══██╗██║ ██║██║╚██╔╝██║██╔═══╝ ██║
██║ ██║ ██║╚██████╔╝██║ ╚═╝ ██║██║ ██║
╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝
██████╗ ██╗ ██╗ █████╗ ██████╗ ██████╗
██╔════╝ ██║ ██║██╔══██╗██╔══██╗██╔══██╗
██║ ███╗██║ ██║███████║██████╔╝██║ ██║
██║ ██║██║ ██║██╔══██║██╔══██╗██║ ██║
╚██████╔╝╚██████╔╝██║ ██║██║ ██║██████╔╝
╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝
```
**防范 prompt injection 攻击的第一道防线。**
扫描本地目录或 GitHub 仓库,检测针对 AI 系统的恶意模式、隐写隐藏信息和注入企图。
## 快速开始
```
pip install -r requirements.txt
```
### 交互模式(推荐初学者使用)
直接运行而不带参数——或双击 `.exe` 文件:
```
python prompt_guard.py
```
你会看到一个菜单,你可以在其中:
1. **扫描文件夹或 GitHub 仓库** —— 粘贴本地路径或 URL
2. **分析文本/prompt** —— 直接粘贴可疑文本以进行检查
### CLI 模式(进阶)
```
# 扫描本地文件夹
python prompt_guard.py ./my-repo
# 扫描 GitHub repo
python prompt_guard.py https://github.com/user/repo
# 附带选项
python prompt_guard.py ./my-repo --output report.json --verbose
```
## 独立可执行文件 (.exe)
构建无需安装 Python 即可运行的便携版可执行文件:
```
pip install pyinstaller
python build.py
```
生成的 `dist/PromptGuard.exe` 可以直接分发,并支持双击运行。
## 检测内容
| 严重程度 | 示例 |
|---|---|
| **CRITICAL** | 凭据外泄、系统 prompt 覆盖、prompt 泄露、通过模板化图片 URL 外泄数据 |
| **HIGH** | 越狱(DAN 模式、开发者模式)、冒充、代码执行、工具/函数调用注入 |
| **MEDIUM** | 隐蔽操纵、隐藏的 iframe/脚本、javascript: 链接、伪造对话角色 |
| **LOW** | 保密指示(“不要告诉用户”、“en secreto”) |
**隐写分析:** 首字母拼写、对角线模式、隐藏的 base64、零宽字符、Unicode Tags(ASCII 走私)、双向控制字符(Trojan Source)、Unicode 同形字、隐藏注释。
特别需要指出的三个攻击向量:
- **ASCII 走私** —— 整个 prompt 编码在 Unicode Tags 块(`U+E0000`–`U+E007F`)中,渲染时完全不可见。扫描器会解码该 payload 并进行报告。
- **Trojan Source** —— 双向控制字符(`U+202A`–`U+202E`、`U+2066`–`U+2069`)会使源码的渲染效果与解析结果不一致(CVE-2021-42574)。
- **零点击图片外泄** —— `` 或等效的 `
` 标签,仅仅渲染响应就会导致数据泄露。普通的纯外部图片不会被标记;只有模板化 URL 和携带数据的查询参数才会被标记。
检测模式支持**英语和西班牙语**。
## 评分
每个文件都会获得一个 0 到 100 的分数:
| 分数 | 级别 | 含义 |
|---|---|---|
| 0-10 | SAFE | 未检测到威胁 |
| 11-40 | SUSPICIOUS | 存在歧义模式,需要人工审查 |
| 41-70 | DANGEROUS | 明显的注入模式 |
| 71-100 | CRITICAL | 存在多个高严重性模式 |
## CLI 选项
```
python prompt_guard.py [options]
source Local path or GitHub URL (required)
-o, --output FILE Report filename (default: report.json)
-v, --verbose Show all files, not just flagged ones
-e, --extensions LIST Comma-separated extensions to scan
-m, --max-size MB Max file size in MB (default: 1.0)
-x, --exclude LIST Comma-separated files/dirs to exclude
```
### 默认扩展名
`.md` `.txt` `.json` `.yaml` `.yml` `.py` `.html` `.htm` `.xml` `.csv` `.rst` `.toml` `.ini` `.cfg` `.conf` `.js` `.ts` `.jsx` `.tsx` `.sh` `.bat` `.ps1`
### 跳过的目录
`.git` `node_modules` `__pycache__` `.venv` `venv` `.tox` `.mypy_cache` `.pytest_cache` `dist` `build`
## CI/CD 集成
```
python prompt_guard.py ./repo && echo "PASS" || echo "ALERT"
```
| 退出代码 | 含义 |
|---|---|
| `0` | 无相关发现 |
| `1` | 中等严重性发现 |
| `2` | 严重或高严重性发现 |
## 输出示例
```
____ _ ____ _
| _ \ _ __ ___ _ __ ___ _ __ | |_ / ___|_ _ __ _ _ __ __| |
| |_) | '__/ _ \| '_ ` _ \| '_ \| __| | | _| | | |/ _` | '__/ _` |
| __/| | | (_) | | | | | | |_) | |_ | |_| | |_| | (_| | | | (_| |
|_| |_| \___/|_| |_| |_| .__/ \__| \____|\__,_|\__,_|_| \__,_|
|_|
First line of defense against prompt injection attacks
by EL_Bcerril
Scanning: ./my-repo
Extensions: .json, .md, .py, .txt, .yaml, .yml
Max file size: 1.0MB
Files found: 12
============================================================
SCAN RESULTS
============================================================
CRITICAL [score 100] docs/config.md
L4 [CRITICAL] Override: ignore previous instructions
L30 [CRITICAL] Base64-encoded content matches pattern
L27 [HIGH ] DAN mode jailbreak attempt
------------------------------------------------------------
Total files scanned: 12
Files flagged: 1
Detections: 2 critical, 1 high, 0 medium, 0 low
------------------------------------------------------------
Report saved to: report.json
```
## 架构
扫描器在单个文件内由 5 个内部模块组成:
| 模块 | 职责 |
|---|---|
| **直接模式扫描器** | 基于 Regex 的检测,覆盖 4 个严重程度层级 |
| **隐写分析** | 首字母拼写、对角线、base64、零宽字符、Unicode Tags、双向控制字符、同形字、隐藏注释 |
| **输入源** | 本地目录遍历和 GitHub 浅克隆 |
| **评分与报告** | 0-100 评分、分类、JSON 报告生成 |
| **CLI 与交互** | 参数解析、交互式菜单、彩色输出 |
## 运行测试
```
pip install -r requirements-dev.txt
python -m pytest tests/ -v
```
## 已知局限性
- 扫描 `prompt_guard.py` 本身会产生误报(符合预期——因为它包含了模式定义)。
- 像 `subprocess` 和 `eval()` 这样的模式可能会标记合法代码。请务必手动审查扫描结果。
- 暂不支持并行文件扫描。大型仓库会按顺序进行扫描。
- 这只是**第一道防线**。它仅分析文本内容,并不执行代码。始终建议对扫描结果进行人工审查。
## 许可证
MIT
标签:DLL 劫持, Python, 云安全监控, 人工智能安全, 合规性, 大语言模型, 安全规则引擎, 文档结构分析, 无后门, 漏洞挖掘, 逆向工具, 静态分析