nrdiiin/ai-code-security-reviewer
GitHub: nrdiiin/ai-code-security-reviewer
基于 tree-sitter AST 解析与可选 LLM 分析的源代码安全漏洞扫描 SDK,支持 Python 和 JavaScript。
Stars: 0 | Forks: 0
# AI Code Security Reviewer
一个使用 tree-sitter AST 解析来检测源代码中安全漏洞的 Python SDK,并支持可选的 AI 驱动分析。
[](https://github.com/nrdiiin/ai-code-security-reviewer/actions/workflows/ci.yml)
[](https://www.python.org/downloads/)
[](LICENSE)
## 功能介绍
AI Code Security Reviewer 使用 [tree-sitter](https://tree-sitter.github.io/) 将源代码解析为 AST,并运行基于模式的检测器来发现安全漏洞 —— 包括硬编码密钥、SQL 注入和危险函数的使用。可选地,它可以将每个发现的问题发送给 LLM(BYOK —— 您需要提供自己的 API key)以获取上下文解释和修复建议。您的代码永远不会发送到任何第三方服务器(您选择的 LLM 提供商除外)。
## 快速开始
```
git clone https://github.com/nrdiiin/ai-code-security-reviewer.git
cd ai-code-security-reviewer
pip install -e .
```
扫描文件:
```
python -m ai_code_security_reviewer.main path/to/file.py
```
作为库使用:
```
from ai_code_security_reviewer.core.parser import parse
from ai_code_security_reviewer.core.analyzer import analyze
from ai_code_security_reviewer.core.ai_engine import analyze_findings
from ai_code_security_reviewer.core.report import Report
code = '''
API_KEY = "sk-secret123"
query = "SELECT * FROM users WHERE id = " + user_id
result = eval(user_input)
'''
result = parse(code, "python")
findings = analyze(result)
advice = analyze_findings(findings) # uses stub if no API key set
report = Report(findings=findings, advice=advice)
print(report.to_text())
```
## 支持的检测项
| 类别 | 检测的模式 |
|----------|-------------------|
| **硬编码密钥** | 变量赋值(`API_KEY = "..."`)、默认参数(`def f(token="...")`)、字典/对象字面量(`{"api_key": "..."}`)。匹配常见关键字:`password`、`secret`、`token`、`api_key`、`private_key` 等。占位符值(例如 `"sk-PLACEHOLDER"`)会被降级为 INFO 严重级别。 |
| **SQL 注入** | 使用 `+` 的字符串拼接、printf 风格的 `%` 格式化、`.format()` 方法调用、带有插值的 f-string、JavaScript 中带有 `${}` 的模板字面量 —— 仅限在 `execute()`、`query()` 或 `raw()` 调用内部使用的情况。 |
| **危险函数** | Python 中的 `eval()`、`exec()`、`compile()`、`__import__()`;JavaScript 中的 `eval()`、`new Function()`。 |
## AI 驱动的分析
设置 API key 以便为每个发现的问题获取 LLM 生成的解释和修复建议:
```
export ANTHROPIC_API_KEY="sk-ant-..."
```
在没有 API key 的情况下,该工具仍会运行完整的分析 —— 只是会使用一个返回占位符建议的 stub 提供程序。LLM 提供程序是可插拔的(抽象的 `LLMProvider` 接口);内置支持 Anthropic Claude,也可以添加其他提供商。
## 支持的语言
| 语言 | 扩展名 |
|----------|------------|
| Python | `.py` |
| JavaScript | `.js`, `.mjs` |
解析器是基于注册表机制的 —— 添加新语言需要安装其对应的 `tree-sitter-*` 包,并在语言映射表中进行注册。现有的规则无需更改任何检测器。
## 已知局限性
此版本使用 **AST 模式匹配**,而不是完整的数据流分析。具体来说:
- **不支持跨行 taint tracking。** 如果 SQL 字符串在某一行构建,并通过变量在另一行传递给 `execute()`,则不会被标记。仅检测内联模式(直接在 `execute()` 调用内部进行的拼接/格式化)。
- **不支持跨过程分析。** 不会跟踪跨越多个函数调用的漏洞(例如,一个辅助函数构建 SQL 字符串,然后从另一个执行该字符串的函数调用它)。
- **密钥检测基于关键字。** 变量名不明显(例如 `x = "AKIA..."`)的密钥将被漏检。
数据流 / taint 分析计划作为未来的增强功能推出。
## 开发
有关设置说明和指南,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
```
pip install -e ".[dev]"
pytest -v
ruff check .
```
## 许可证
[MIT](LICENSE)
标签:AI辅助分析, AST解析, C2, Python SDK, StruQ, 代码安全审计, 数据泄露, 逆向工具, 错误基检测, 静态代码分析