SHARMILI152008/Port-Scanner-Python-
GitHub: SHARMILI152008/Port-Scanner-Python-
一款通过正则模式匹配检测 Python 代码中 SQL 注入漏洞的静态扫描工具,支持批量扫描并提供修复建议。
Stars: 0 | Forks: 0
# SQL 注入漏洞扫描器
一款全面的 Python 工具,用于检测和分析代码库中潜在的 SQL 注入漏洞。
## 📋 概述
该扫描器能够识别 Python 代码中可能导致 SQL 注入攻击的不安全 SQL 模式。它会分析您的代码,排查字符串拼接、f-string 以及未参数化查询等危险操作。
## ✨ 功能
- **全面扫描**:检测多种类型的 SQL 注入漏洞
- **模式匹配**:使用 regex 模式识别不安全的 SQL 操作
- **详细报告**:生成包含行号的详细漏洞报告
- **修复建议**:为每个漏洞提供安全建议
- **批量处理**:扫描单个文件或整个目录
- **示例**:包含不安全与安全的代码模式对比
## 🚀 安装
```
# 克隆仓库
git clone https://github.com/SHARMILI152008/Port-Scanner-Python-.git
cd Port-Scanner-Python-
# 无需外部依赖 - 仅使用 Python 标准库
```
## 📖 使用方法
### 查看示例和使用说明:
```
python sql_injection_scanner.py
```
### 扫描单个文件:
```
python sql_injection_scanner.py app.py
```
### 扫描整个目录:
```
python sql_injection_scanner.py ./src
```
## 🔍 检测到的漏洞类型
1. **F-String 注入**:`f'SELECT * FROM users WHERE id = {user_id}'`
2. **字符串拼接**:`'SELECT * FROM users WHERE id = ' + str(id)`
3. **Format String 注入**:`'SELECT * FROM users WHERE id = {}'.format(id)`
4. **百分号字符串格式化**:`'SELECT * FROM users WHERE id = %s' % id`
5. **不安全的 execute() 调用**:在 execute() 方法中直接使用用户输入
6. **Request Parameter 注入**:从 request parameter 构建查询
## ✅ 识别为安全的模式
扫描器会识别以下安全模式,并且不会对其进行标记:
1. **使用 ? 的参数化查询**:
cur.execute('SELECT * FROM users WHERE id = ?', (user_id,))
2. **使用 % 的参数化查询**:
cur.execute('SELECT * FROM users WHERE id = %s', (user_id,))
3. **命名参数化查询**:
cur.execute('SELECT * FROM users WHERE id = :id', {'id': user_id})
## 📊 报告示例
```
======================================================================
SQL INJECTION VULNERABILITY REPORT
======================================================================
Total Vulnerabilities Found: 2
1. FILE: app.py
LINE: 45
SEVERITY: HIGH
ISSUE: Using f-strings with user input in SQL
CODE: query = f'SELECT * FROM users WHERE username = {username}'
----------------------------------------------------------------------
2. FILE: app.py
LINE: 78
SEVERITY: HIGH
ISSUE: String concatenation with SQL keywords
CODE: query = 'SELECT * FROM products WHERE id = ' + str(product_id)
----------------------------------------------------------------------
```
## 🛠️ 程序结构
### 类
#### `SQLInjectionScanner`
主扫描器类,包含以下方法:
- `scan_file(filepath)` - 扫描单个 Python 文件
- `scan_directory(directory)` - 递归扫描目录中的所有 Python 文件
- `generate_report(vulnerabilities)` - 创建格式化的漏洞报告
- `suggest_fix(vulnerability)` - 获取特定漏洞的修复建议
#### `VulnerableSQLExamples`
提供不安全与安全的 SQL 模式示例:
- `get_examples()` - 返回包含示例模式的字典
## 💡 示例
### 不安全代码
```
# 示例 1:F-string 注入
username = input("Enter username: ")
cur.execute(f'SELECT * FROM users WHERE username = {username}')
# 示例 2:字符串拼接
product_id = request.args.get('id')
query = 'SELECT * FROM products WHERE id = ' + product_id
cur.execute(query)
# 示例 3:百分号格式化
user_id = request.form.get('user_id')
cur.execute('SELECT * FROM users WHERE id = %s' % user_id)
```
### 安全代码
```
# 示例 1:使用 ? 参数化
username = input("Enter username: ")
cur.execute('SELECT * FROM users WHERE username = ?', (username,))
# 示例 2:使用 % 参数化
product_id = request.args.get('id')
cur.execute('SELECT * FROM products WHERE id = %s', (product_id,))
# 示例 3:命名参数
user_id = request.form.get('user_id')
cur.execute('SELECT * FROM users WHERE id = :id', {'id': user_id})
```
## 🔒 安全最佳实践
1. **始终使用参数化查询**:切勿将用户输入拼接进 SQL 字符串中
2. **使用 Prepared Statements**:让数据库引擎处理查询准备工作
3. **输入验证**:验证并清理所有用户输入
4. **最小权限原则**:使用仅具有最低所需权限的数据库账户
5. **定期安全审计**:将此扫描器作为 CI/CD pipeline 的一部分定期运行
## 📝 输出详情
每个漏洞报告包含:
- **文件**:存在漏洞的文件路径
- **行**:发现漏洞的行号
- **严重程度**:风险级别(HIGH、MEDIUM、LOW)
- **问题**:漏洞类型描述
- **代码**:实际存在漏洞的代码片段
- **修复**:建议的修正方案
## 📄 许可证
本项目是开源的,可用于教育和安全研究目的。
## ⚠️ 免责声明
此工具专为安全分析和教育目的而设计。请使用它来识别和修复您自己代码中的漏洞。请始终遵循负责任的披露实践。
## 📞 支持
如有任何问题、疑问或建议,请在 GitHub 仓库中提交 issue。
**仓库**:https://github.com/SHARMILI152008/Port-Scanner-Python-
**作者**:SHARMILI152008
**最后更新**:2026-07-03
标签:CISA项目, Python, SQL注入检测, 无后门, 逆向工具