aalborz/ai-website-security-agent
GitHub: aalborz/ai-website-security-agent
一款专为 AI 生成 Web 项目设计的零依赖 Python 静态安全扫描工具,检测凭据泄露、OWASP LLM Top 10 风险和常见 Web 漏洞。
Stars: 0 | Forks: 0
# AI 网站安全 Agent
一款无依赖的 Python 静态安全扫描工具,专为 AI 生成的 Web 项目设计。
它能够扫描源码树,检测不安全存储的凭据、**OWASP Top 10 for
LLM Applications 2025** 以及常见的 Web 漏洞。
## 用法
```
# 扫描一个或多个项目(或父文件夹 - 项目会被自动发现)
python -m scanner "C:\path\to\site" "C:\path\to\folder-of-sites" --out reports
```
要求 Python 3.10+。无需任何第三方包。
输出结果:
- 控制台摘要(按严重程度排序)
- `reports/scan-report.md` — 按项目和类别分组的人类可读报告
- `reports/scan-results.json` — 机器可读的结果
退出代码:`0` 表示正常,`1` 表示中/低危发现,`2` 表示高危,`3` 表示严重
(可用作 CI 门禁)。
## 检测内容
### 凭据与机密信息 (SEC001–SEC022)
- 提供商密钥:AWS, OpenAI, Anthropic, Google, GitHub, Stripe, Slack,
Twilio, SendGrid
- 私钥材料(`-----BEGIN PRIVATE KEY-----`),JWTs,包含内嵌密码的连接
字符串,硬编码的密码/机密信息赋值
(通过熵值过滤跳过占位符)
- 通过 `NEXT_PUBLIC_` / `VITE_` / `REACT_APP_` 暴露给浏览器的机密信息
- 在 `"use client"` 组件中引用的 Supabase `service_role` 密钥
- 未包含在 `.gitignore` 中的 `.env` 文件,位于构建/公开输出目录中的
`.env`,以及同步到云存储 (OneDrive) 的机密信息
### OWASP Top 10 for LLM Applications 2025
| ID | 风险 | 检测示例 |
|---|---|---|
| LLM01 | 提示词注入 (Prompt Injection) | 用户输入被插入到 prompts / system role 中 |
| LLM02 | 敏感信息泄露 | prompt 文本中包含机密信息、记录 prompt/response 日志 |
| LLM03 | 供应链问题 | 未锁定的依赖、git/http 依赖、缺少 lockfile、`trust_remote_code` |
| LLM04 | 数据与模型投毒 | 将不受信任的 Web 内容提供给 embeddings/训练 |
| LLM05 | 输出处理不当 | LLM 输出到 innerHTML / eval / SQL / 未净化的 markdown |
| LLM06 | 过度授权 | 具备 shell/文件系统访问权限的 agent 工具、自动批准 |
| LLM07 | 系统提示词泄露 | 客户端代码中的系统 prompts、prompts 中的凭据 |
| LLM08 | 向量/嵌入漏洞 | 未经身份验证的向量数据库客户端 |
| LLM09 | 误导信息 | 在健康/法律/金融场景下未加限制的模型输出 |
| LLM10 | 无限制消耗 | 缺少 `max_tokens`、缺少速率限制的 LLM 应用 |
### 经典 Web 漏洞 (WEB001–WEB015)
XSS 注入点(`dangerouslySetInnerHTML`、`innerHTML`、`eval`),SQL/命令
注入模式,通配符 CORS,调试模式,不安全的 cookies,弱密码哈希,禁用
TLS 验证,不安全的反序列化,开放重定向,混合内容,未经身份验证的状态
修改型 API 路由(启发式检测),以及缺失的安全标头。
## 准确性说明
- 报告中的机密信息值已被**脱敏**(中间部分被掩码),因此报告
本身不会造成二次泄露。
- 占位符值(如 `your_key_here`、`process.env.X`、`.example` 文件)会被
抑制;通用的机密信息匹配会进行熵值过滤。
- `INFO` 发现项(例如 WEB014 身份验证检查启发式规则)仅供人工审查参考,
并非已确认的漏洞。
- 这是一个静态分析工具:它无法确认漏洞的可利用性。请将 CRITICAL 级别的
机密信息发现视为已泄露,并及时对其进行轮换。
## 目录结构
```
scanner/
__main__.py CLI + project auto-discovery
engine.py file walker, rule application, project-level checks
rules.py all detection rules (secrets, LLM Top 10, web)
report.py console / JSON / Markdown reporting
```
添加规则:在 `rules.py` 中相应的部分下追加一个 `_r(...)` 条目。
标签:AI安全, Chat Copilot, DLL 劫持, LNA, Python, StruQ, Web安全, 大语言模型, 无后门, 蓝队分析, 逆向工具, 静态应用安全测试