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注入检测, 无后门, 逆向工具