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 驱动分析。 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/nrdiiin/ai-code-security-reviewer/actions/workflows/ci.yml) [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](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, 代码安全审计, 数据泄露, 逆向工具, 错误基检测, 静态代码分析