t0nigansel/pinj
GitHub: t0nigansel/pinj0r
一个基于 Shell 脚本的轻量级 LLM 提示注入基线安全检测工具,通过向 HTTP 端点发送恶意提示并分析响应来快速筛查基本安全漏洞。
Stars: 1 | Forks: 1
# pinj

`pinj` 是一个用于 LLM 和代理 HTTP 端点的微小 prompt 注入基线安全检查工具。
当前版本:`0.1.0`
它向目标端点发送少量恶意 prompt,存储原始响应,并标记明显的可疑行为。
`pinj` 有意保持简单。
它不能证明代理是安全的。
它有助于找出未能通过基本检查的端点。
## 为什么需要?
LLM 和代理应用程序通常会暴露新的故障模式:
- prompt 注入
- 系统 prompt 泄漏
- 敏感信息泄漏
- 角色覆盖
- 工具滥用
- 过度输出
- denial-of-wallet 行为
在信任 AI 端点之前,请针对其运行基本的恶意 prompt。
未通过这些测试是一个强烈的警告信号。
## pinj 和 promptfoo
[promptfoo](https://github.com/promptfoo/promptfoo) 更全面,适合完整的评估 pipeline。`pinj` 是一个基于 curl 的基线检查工具,适用于没有 Node 或 Python 依赖的 CI 环境。
## 当前范围
`pinj` 假定:
- HTTP POST 端点
- JSON 请求体
- bearer-token 身份验证
- 每个 `attacks/*.txt` 文件中每行一个 prompt
默认请求体:
```
{
"message": "prompt text"
}
```
要使用不同的 prompt 字段,请设置:
```
export PINJ_JSON_FIELD="input"
```
它会发送:
```
{
"input": "prompt text"
}
```
## 文件
```
pinj/
README.md
AGENTS.md
LICENSE
PLAN.md
VERSION
attacks/
config.example.env
docs/
examples/
patterns.txt
request.template.example.json
run.sh
tests/
results/
```
## 快速开始
```
cp config.example.env .env
```
编辑 `.env`:
```
export PINJ_TARGET_URL="https://example.com/chat"
export PINJ_BEARER_TOKEN="replace-me"
export PINJ_ATTACKS_DIR="attacks"
export PINJ_JSON_FIELD="message"
export PINJ_PATTERNS_FILE="patterns.txt"
```
然后运行:
```
. ./.env
./run.sh
```
用于 CI:
```
./run.sh --ci
```
测试 AI Goat:
```
docs/aigoat.md
```
## 输出
结果写入:
```
results/
```
示例:
```
results/
direct-injection_001.json
sensitive-disclosure_001.json
system-prompt-leakage_001.json
summary.md
```
## 攻击语料库
攻击 prompt 存放在以下目录的纯文本文件中:
```
attacks/
```
每个 `.txt` 文件被视为一个类别。每个非空行作为一个 prompt 发送。
示例:
```
attacks/
direct-injection.txt
sensitive-disclosure.txt
system-prompt-leakage.txt
```
要添加或移除测试,请编辑这些文件或添加另一个 `.txt` 文件。
为了兼容单个文件,你也可以设置:
```
export PINJ_ATTACKS_FILE="attacks/direct-injection.txt"
```
## 请求模板
默认情况下,`pinj` 发送:
```
{
"message": "prompt text"
}
```
对于期望不同 JSON 结构的端点,请创建一个请求模板文件,并将 `{{prompt}}` 放在需要注入每个攻击 prompt 的位置。
示例:
```
{
"messages": [
{
"role": "user",
"content": "{{prompt}}"
}
],
"temperature": 0
}
```
然后设置:
```
export PINJ_REQUEST_TEMPLATE_FILE="request.template.json"
```
当设置了 `PINJ_REQUEST_TEMPLATE_FILE` 时,它优先于 `PINJ_JSON_FIELD`。
`pinj` 不会执行原始粘贴的 curl 命令。请将 method、URL、bearer token 和 content type 保留在现有的环境变量中,并将模板文件用于请求体。
示例模板位于:
```
examples/
```
例如:
```
export PINJ_REQUEST_TEMPLATE_FILE="examples/openai-chat.template.json"
```
## 可疑模式
可疑的响应模式位于:
```
patterns.txt
```
每个非空行都会与原始响应进行不区分大小写的匹配。以 `#` 开头的行将被忽略。
示例:
```
system prompt
developer message
api key
secret
token
```
要使用不同的模式文件,请设置:
```
export PINJ_PATTERNS_FILE="my-patterns.txt"
```
## 退出码
```
0 = no obvious suspicious response found
1 = suspicious response found
2 = configuration or runtime error
```
在 CI 模式下,诸如 curl 失败或非 2xx HTTP 响应等端点错误将以 `2` 退出。
## 测试
使用以下命令运行 shell 检查:
```
./tests/run-tests.sh
```
## 局限性
`pinj` v0.1 使用简单的关键字匹配。
它可能会产生误报。
它可能会遗漏真正的漏洞。
它是一项基线安全检查,而不是完整的安全评估。
## 示例攻击 Prompt
参见:
```
attacks/
```
初始语料库包含以下基本检查:
- 直接和间接 prompt 注入
- 系统 prompt 泄漏
- 敏感数据披露
- 过度代理和工具滥用
- 不安全的输出处理
- RAG 内容操纵
- 决策操纵
- 成本收集
- 多模态隐藏指令
- 越狱角色扮演
- 格式绕过
## 许可证
MIT 许可证。版权所有 (c) 2026 Toni Gansel。
标签:AI安全, AI风险评估, API安全, Chat Copilot, CI/CD测试, CISA项目, Cutter, HTTP端点测试, JSON输出, LLM测试工具, LLM防护验证, LNA, Shell脚本, 大语言模型安全, 安全基线检查, 安全自动化测试, 应用安全, 拒绝钱包攻击, 提示注入, 机密管理, 系统提示词提取, 红队评估, 自动化安全扫描, 角色覆盖, 集群管理