<feat> 安全限制

This commit is contained in:
tangyi
2025-03-27 15:44:49 +08:00
parent 370b2ac9da
commit b0463903f5
12 changed files with 551 additions and 12 deletions

View File

@ -8,7 +8,14 @@
- 支持SSEServer-Sent Events实时数据传输
- 提供MySQL数据库查询接口
- 完整的日志记录系统
- 自动事务管理(提交/回滚)
- 环境变量配置支持
- SQL安全检查机制
- 风险等级控制
- SQL注入防护
- 危险操作拦截
- WHERE子句强制检查
- 自动返回修改操作影响的行数
## 系统要求
@ -36,6 +43,7 @@ pip install -r requirements.txt
`.env`文件中配置以下参数:
### 基本配置
- `HOST`: 服务器监听地址默认127.0.0.1
- `PORT`: 服务器监听端口默认3000
- `MYSQL_HOST`: MySQL服务器地址
@ -44,6 +52,45 @@ pip install -r requirements.txt
- `MYSQL_PASSWORD`: MySQL密码
- `MYSQL_DATABASE`: MySQL数据库名
### SQL安全配置
- `ENV_TYPE`: 环境类型development/production
- `ALLOWED_RISK_LEVELS`: 允许的风险等级LOW/MEDIUM/HIGH/CRITICAL
- `BLOCKED_PATTERNS`: 禁止的SQL模式正则表达式用逗号分隔
- `ENABLE_QUERY_CHECK`: 是否启用SQL安全检查true/false
## SQL安全机制
### 风险等级控制
- LOW: 查询操作SELECT
- MEDIUM: 基本数据修改INSERT有WHERE的UPDATE/DELETE
- HIGH: 结构变更CREATE/ALTER和无WHERE的UPDATE
- CRITICAL: 危险操作DROP/TRUNCATE和无WHERE的DELETE操作
### 环境变量加载顺序
项目使用python-dotenv加载环境变量需要确保在导入其他模块前先加载环境变量否则可能会导致配置未被正确应用。
### 安全检查机制
- 强制要求UPDATE/DELETE操作包含WHERE子句
- SQL语句语法检查
- 危险操作模式检测
- 自动识别受影响的表
- 风险等级评估
### 环境特性
- 开发环境:允许较高风险的操作,但仍需遵守基本安全规则
- 生产环境默认只允许LOW风险操作严格限制数据修改
### 安全拦截
- SQL语句长度限制
- 危险操作模式检测
- 自动识别受影响的表
- SQL注入防护
### 事务管理
- 对于修改操作INSERT/UPDATE/DELETE会自动提交事务
- 执行错误时自动回滚事务
- 返回操作影响的行数
## 启动服务器
运行以下命令启动服务器:
@ -61,11 +108,34 @@ python src/server.py
├── src/ # 源代码目录
│ ├── server.py # 主服务器文件
│ ├── db/ # 数据库相关代码
│ ├── security/ # SQL安全相关代码
│ │ ├── interceptor.py # SQL拦截器
│ │ ├── query_limiter.py # SQL安全检查器
│ │ └── sql_analyzer.py # SQL分析器
│ └── tools/ # 工具类代码
├── tests/ # 测试代码目录
├── .env.example # 环境变量示例文件
└── requirements.txt # 项目依赖文件
```
## 常见问题解决
### DELETE操作未执行成功
- 检查DELETE操作是否包含WHERE条件
- 无WHERE条件的DELETE操作被标记为CRITICAL风险级别
- 确保环境变量ALLOWED_RISK_LEVELS中包含CRITICAL如果需要执行该操作
- 检查影响行数返回值,确认操作是否实际影响了数据库
### 环境变量未生效
- 确保在server.py中的load_dotenv()调用发生在导入其他模块之前
- 重启应用以确保环境变量被正确加载
- 检查日志中"从环境变量读取到的风险等级设置"的输出
### 操作被安全机制拒绝
- 检查操作的风险级别是否在允许的范围内
- 如果需要执行高风险操作相应地调整ALLOWED_RISK_LEVELS
- 对于不带WHERE条件的UPDATE或DELETE可以添加条件即使是WHERE 1=1降低风险级别
## 日志系统
服务器包含完整的日志记录系统,可以在控制台和日志文件中查看运行状态和错误信息。日志级别可以在`server.py`中配置。
@ -75,7 +145,9 @@ python src/server.py
服务器包含完善的错误处理机制:
- MySQL连接器导入检查
- 数据库配置验证
- SQL安全检查
- 运行时错误捕获和记录
- 事务自动回滚
## 贡献指南