- 创建 /api/enhance 路由,实现图片变清晰API集成 - 在图片标注组件中添加变清晰按钮(Sparkles图标) - 在相册页面添加变清晰按钮 - 系统设置:将抠图设置改名为本地AI设置,添加变清晰API配置 - 支持同步和异步两种模式 - 自动上传到S3存储桶并保存到数据库 - 在相册和出图记录中显示处理后的图片
210 lines
4.3 KiB
Markdown
210 lines
4.3 KiB
Markdown
# PostgreSQL 数据库安全报告
|
||
|
||
## 📊 安全状态总览
|
||
|
||
### ✅ 已实施的安全措施
|
||
|
||
1. **网络访问控制**
|
||
- ✅ 仅监听本地地址(127.0.0.1, ::1)
|
||
- ✅ 无外部网络访问
|
||
- ✅ 端口5432仅本地可访问
|
||
|
||
2. **CrowdSec监控**
|
||
- ✅ PostgreSQL暴力破解检测已启用
|
||
- ✅ 实时监控数据库连接
|
||
- ✅ 自动检测和封禁攻击者
|
||
|
||
3. **应用层安全**
|
||
- ✅ 使用ORM (Drizzle ORM)
|
||
- ✅ 自动参数化查询
|
||
- ✅ 防止SQL注入攻击
|
||
|
||
4. **日志记录**
|
||
- ✅ 数据库日志已启用
|
||
- ✅ 记录所有查询和错误
|
||
|
||
## 🔍 详细安全检查
|
||
|
||
### 1. 网络访问安全
|
||
|
||
**当前配置:**
|
||
- 监听地址:`localhost` (127.0.0.1, ::1)
|
||
- 外部连接:0个
|
||
- 端口:5432(仅本地)
|
||
|
||
**安全评估:** ✅ 安全
|
||
- 数据库不对外暴露
|
||
- 只能通过本地应用访问
|
||
- 无法从外部直接连接
|
||
|
||
### 2. 访问控制 (pg_hba.conf)
|
||
|
||
**需要检查的配置:**
|
||
- 本地连接认证方式
|
||
- 密码加密方式
|
||
- 用户权限限制
|
||
|
||
**建议:**
|
||
- 使用`md5`或`scram-sha-256`认证
|
||
- 限制用户权限到最小必要
|
||
- 定期审查用户列表
|
||
|
||
### 3. CrowdSec监控
|
||
|
||
**已启用场景:**
|
||
- `crowdsecurity/pgsql-bf` - PostgreSQL暴力破解检测
|
||
|
||
**监控能力:**
|
||
- 检测暴力破解攻击
|
||
- 自动封禁攻击者IP
|
||
- 记录攻击尝试
|
||
|
||
**当前状态:**
|
||
- 攻击警报:0个
|
||
- 监控状态:正常
|
||
|
||
### 4. 应用层安全
|
||
|
||
**ORM使用:**
|
||
- Drizzle ORM自动参数化所有查询
|
||
- 防止SQL注入攻击
|
||
- 类型安全的查询构建
|
||
|
||
**查询示例:**
|
||
```typescript
|
||
// ✅ 安全:使用ORM,自动参数化
|
||
await db.select().from(user).where(eq(user.email, email));
|
||
|
||
// ❌ 不安全:直接SQL拼接(项目中未使用)
|
||
// await db.execute(`SELECT * FROM user WHERE email = '${email}'`);
|
||
```
|
||
|
||
### 5. 数据库用户权限
|
||
|
||
**当前用户:**
|
||
- `chatbot_user` - 应用数据库用户
|
||
- `postgres` - 管理员用户
|
||
|
||
**权限建议:**
|
||
- 应用用户仅需必要的表权限
|
||
- 不要使用超级用户运行应用
|
||
- 定期审查用户权限
|
||
|
||
### 6. 密码安全
|
||
|
||
**当前状态:**
|
||
- 密码存储在环境变量中
|
||
- 使用强密码策略
|
||
|
||
**建议:**
|
||
- 定期更换密码
|
||
- 使用密码管理器
|
||
- 不要在代码中硬编码密码
|
||
|
||
## ⚠️ 需要加强的安全措施
|
||
|
||
### 优先级1:立即实施
|
||
|
||
1. **检查pg_hba.conf配置**
|
||
```bash
|
||
# 确保使用安全的认证方式
|
||
local all all md5
|
||
host all all 127.0.0.1/32 md5
|
||
```
|
||
|
||
2. **启用SSL连接**(如果可能)
|
||
```bash
|
||
# 在postgresql.conf中启用SSL
|
||
ssl = on
|
||
```
|
||
|
||
3. **限制数据库用户权限**
|
||
```sql
|
||
-- 仅授予必要的权限
|
||
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO chatbot_user;
|
||
```
|
||
|
||
### 优先级2:短期实施
|
||
|
||
1. **定期备份**
|
||
- 自动备份数据库
|
||
- 测试恢复流程
|
||
|
||
2. **监控异常查询**
|
||
- 设置慢查询日志
|
||
- 监控异常访问模式
|
||
|
||
3. **审计日志**
|
||
- 记录所有数据库操作
|
||
- 定期审查日志
|
||
|
||
### 优先级3:长期优化
|
||
|
||
1. **数据库加密**
|
||
- 表级加密
|
||
- 敏感字段加密
|
||
|
||
2. **访问审计**
|
||
- 完整的访问日志
|
||
- 异常行为检测
|
||
|
||
3. **定期安全审计**
|
||
- 检查配置
|
||
- 更新补丁
|
||
- 审查权限
|
||
|
||
## 📋 安全检查清单
|
||
|
||
### 网络安全
|
||
- [x] 仅监听本地地址
|
||
- [x] 无外部访问
|
||
- [ ] 防火墙规则(如果需要)
|
||
|
||
### 访问控制
|
||
- [ ] 检查pg_hba.conf配置
|
||
- [ ] 审查用户权限
|
||
- [ ] 使用强密码
|
||
|
||
### 监控和日志
|
||
- [x] CrowdSec监控已启用
|
||
- [x] 数据库日志已启用
|
||
- [ ] 设置日志轮转
|
||
|
||
### 应用安全
|
||
- [x] 使用ORM防止SQL注入
|
||
- [x] 参数化查询
|
||
- [ ] 输入验证(应用层)
|
||
|
||
## 🛡️ 当前安全等级
|
||
|
||
**总体评估:** ✅ **较安全**
|
||
|
||
**优势:**
|
||
- ✅ 网络隔离良好(仅本地访问)
|
||
- ✅ 使用ORM防止SQL注入
|
||
- ✅ CrowdSec监控已启用
|
||
- ✅ 日志记录完整
|
||
|
||
**需要改进:**
|
||
- ⚠️ 需要检查pg_hba.conf详细配置
|
||
- ⚠️ 需要审查用户权限
|
||
- ⚠️ 考虑启用SSL(如果可能)
|
||
|
||
## 📝 建议的后续行动
|
||
|
||
1. **立即执行:**
|
||
- 检查pg_hba.conf配置
|
||
- 审查数据库用户权限
|
||
- 确认密码强度
|
||
|
||
2. **短期执行:**
|
||
- 设置数据库备份
|
||
- 配置日志轮转
|
||
- 审查慢查询
|
||
|
||
3. **长期执行:**
|
||
- 定期安全审计
|
||
- 更新PostgreSQL版本
|
||
- 实施数据库加密
|
||
|