slowql/slowql
GitHub: slowql/slowql
一款完全离线的 SQL 静态分析工具,通过 282 条规则检测安全、性能、可靠性、合规、成本和质量问题,支持 CI/CD 集成。
Stars: 141 | Forks: 9
## 为什么选择 SlowQL
**离线优先分析。** 无需连接实时数据库即可捕获 bug。SlowQL 完全基于 SQL 源文件运行,可在任何地方安全运行。
**自定义规则引擎。** 通过 YAML 规则或 Python 插件定义您自己的组织 SQL 规范。自定义规则与内置目录无缝集成,支持完整的报告和抑制功能。
**282 条内置规则。** 涵盖安全、性能、可靠性、合规、成本和质量。每个规则都包含影响文档、修复指导和严重性分类。
**死 SQL 检测。** 安全识别未使用的数据库对象和冗余代码。SlowQL 通过分析整个项目中定义和使用情况,检测未使用的视图、存储过程和函数。它还会标记过程中无法到达的代码路径(例如 `RETURN` 之后的代码)以及应该合并的几乎重复的查询。
**跨文件 SQL 分析。** 检测多个文件中的破坏性更改。SlowQL 理解 DDL、视图和过程之间的关系,当一个文件中的架构更改(例如 `DROP COLUMN`)破坏另一个文件中的查询时,会发出警告。
**dbt 和 Jinja 支持。** 原生解析包含 Jinja 标签(`{{ ref() }}`、`{%if%}`、`{%for%}`)的 dbt 模型和 SQL 模板。强制执行 dbt 最佳实践,包括缺失引用和硬编码架构检测。
**迁移框架支持。** 原生支持 **Alembic**、**Django 迁移**、**Flyway**、**Liquibase**、**Prisma Migrate** 和 **Knex**。SlowQL 理解迁移文件的顺序、依赖关系和上下文,在破坏性更改影响您现有查询之前捕获它们。
**14 种 SQL 方言。** 针对 PostgreSQL、MySQL、SQL Server (T-SQL)、Oracle、SQLite、Snowflake、BigQuery、Redshift、ClickHouse、DuckDB、Presto、Trino、Spark 和 Databricks 的方言感知分析。通用规则在所有方言上触发;方言特定规则仅在相关时触发。
**架构感知验证。** 可选择根据您的 DDL 文件进行验证,捕获缺失的表、列,并建议索引。
**安全自动修复。** 保守的精确文本替换修复,使用 `FixConfidence.SAFE`。无需猜测,无需启发式重写。使用 `--diff` 预览,使用 `--fix` 应用。
**CI/CD 原生。** GitHub Actions、SARIF、pre-commit 钩子、JSON/HTML/CSV 导出。基于严重性阈值的退出代码。
**编辑器集成。** 通过 [slowql-vscode](https://marketplace.visualstudio.com/items?itemName=Makroumi.slowql-vscode) 提供 VS Code 扩展,以及用于其他编辑器的基础 LSP 服务器。
**应用代码 SQL 提取。** 自动提取并分析嵌入在 **Python**、**TypeScript/JavaScript**、**Java**、**Go**、**Ruby** 和 **MyBatis XML mapper** 文件中的 SQL 字符串。SlowQL 使用特定于语言的启发式方法(Python 的 AST,其他语言的 regex)和专用的 MyBatis XML 解析器来查找 SQL,标记动态构造中潜在的注入风险。它区分安全的 `#{param}` 参数化和不安全的 `${param}` 插值,并将在动态 MyBatis 标签(`
`、``、`` 等)中使用的查询标记为动态查询。
## 安装
### pipx(推荐)
```
pipx install slowql
```
### pip
```
pip install slowql
```
### Docker
```
docker run --rm -v $(pwd):/src makroumi/slowql /src/queries.sql
```
要求:Python 3.11+、Linux / macOS / Windows。
## 快速开始
```
slowql queries.sql
```
分析应用代码(自动提取 SQL 字符串):
```
slowql src/app.py src/services/
```
使用架构验证进行分析:
```
slowql queries.sql --schema schema.sql
```
在 CI 模式下运行,设定失败阈值:
```
slowql init --dialect postgresql --fail-on high
slowql src/ --fail-on high
```
### 分析 MyBatis mapper 文件:
```
slowql src/main/resources/mapper/UserMapper.xml
slowql src/main/resources/mapper/ --schema db/schema.sql
```
预览并应用安全修复:
```
slowql queries.sql --diff
slowql queries.sql --fix --fix-report fix-report.json
```
### 探索规则目录
动态列出所有内置规则或获取特定规则的详细文档:
```
slowql --list-rules
slowql --explain PERF-SCAN-001
```
### Python API 集成
只需三行代码即可将 SlowQL 直接集成到您的 Python 脚本中:
```
import slowql
result = slowql.analyze("SELECT * FROM users")
```
## 架构感知验证
SlowQL 通过检查您的 DDL 文件执行可选的架构感知验证。这可以捕获通用静态分析遗漏的结构性问题。
**表和列。** 检测对不存在的表或列的引用。
**索引建议。** 识别缺少相应索引的过滤列。
```
slowql queries.sql --schema database/schema.sql
slowql migrations/ --schema schema.sql --fail-on critical
```
架构发现结果:
| 规则 | 描述 |
|------|-------------|
| `SCHEMA-TBL-001` | 引用了表中未定义的表 |
| `SCHEMA-COL-001` | 引用了表中不存在的列 |
| `SCHEMA-IDX-001` | 为过滤列建议了缺失的索引 |
SlowQL 附带 **282 条规则**,涵盖六个维度:
| 维度 | 关注点 | 规则数 |
|-----------|-------|------:|
| 安全 | SQL 注入、权限提升、凭证暴露、SSRF | 61 |
| 性能 | 全表扫描、索引、连接、锁定、排序、分页 | 73 |
| 可靠性 | 防止数据丢失、事务、竞态条件、幂等性 | 44 |
| 质量 | 命名、复杂性、空值处理、样式、dbt、死 SQL | 51 |
| 成本 | 云仓库优化、存储、计算、网络 | 33 |
| 合规 | GDPR、HIPAA、PCI-DSS、SOX、CCPA | 18 |
## MyBatis XML 支持
**MyBatis** 是一个流行的 Java/Spring ORM 框架,使用 XML mapper 文件定义 SQL 语句。SlowQL 现在可以解析这些 mapper 文件并应用所有现有 SQL 规则。
### 支持的 MyBatis 标签
- `标签:DevOps工具, Docker工具, LNA, SQL注入检测, SQL静态分析, Subfinder, VSCode插件, 代码安全, 合规检测, 开发安全, 性能优化, 成本优化, 检测绕过, 源代码检测, 漏洞枚举, 离线工具, 规则检测, 请求拦截, 逆向工具, 静态分析工具