6.1 KiB
6.1 KiB
硬编码审计报告(2026-03-05)
审计目的
确保系统可以在不同环境(开发机、生产环境、客户现场)部署,所有配置必须通过 .env 文件管理,不允许硬编码。
审计范围
- 后端代码(
backend/) - 启动脚本(
run_backend.py,scripts/) - 配置文件(
.env,config.py)
发现的硬编码问题
🔴 高优先级(必须修复)
1. Ollama API 地址硬编码
位置:
backend/app/ai_service.py:231backend/app/services/health_service.py:115
问题:
# 硬编码 Ollama API 地址
resp = await client.get("http://127.0.0.1:11434/api/tags")
影响:
- 如果 Ollama 部署在其他机器或端口,无法连接
- 客户环境可能使用不同的 Ollama 地址
修复方案:
# 从环境变量读取
OLLAMA_BASE_URL = os.getenv("OLLAMA_BASE_URL", "http://127.0.0.1:11434")
resp = await client.get(f"{OLLAMA_BASE_URL}/api/tags")
.env 配置:
# Ollama 服务地址(基础 URL)
OLLAMA_BASE_URL=http://127.0.0.1:11434
2. Nginx 健康检查地址硬编码
位置:
backend/app/services/health_service.py:130
问题:
# 硬编码 Nginx 地址
resp = await client.get("http://127.0.0.1/")
影响:
- 如果 Nginx 监听其他端口或地址,健康检查失败
- 客户环境可能使用不同的 Nginx 配置
修复方案:
# 从环境变量读取
NGINX_HEALTH_URL = os.getenv("NGINX_HEALTH_URL", "http://127.0.0.1/")
resp = await client.get(NGINX_HEALTH_URL)
.env 配置:
# Nginx 健康检查地址
NGINX_HEALTH_URL=http://127.0.0.1/
3. 后端绑定地址硬编码
位置:
run_backend.py:29
问题:
# 硬编码绑定地址
bind_host = "127.0.0.1"
影响:
- 无法从外部访问(Docker 容器、远程部署)
- 某些部署场景需要绑定
0.0.0.0
修复方案:
# 从环境变量读取
bind_host = os.getenv("BACKEND_BIND_HOST", "127.0.0.1")
.env 配置:
# 后端绑定地址(127.0.0.1 仅本地,0.0.0.0 允许外部访问)
BACKEND_BIND_HOST=127.0.0.1
🟡 中优先级(建议修复)
4. PROJ 数据库路径检查脚本硬编码
位置:
scripts/check_proj.py:62
问题:
# 硬编码 PostgreSQL PROJ 路径
pg_proj = r"C:\Program Files\PostgreSQL\17\share\contrib\postgis-3.6\proj\proj.db"
影响:
- 不同 PostgreSQL 版本路径不同
- 客户环境可能安装在其他位置
修复方案:
# 从环境变量读取,或自动检测
pg_proj = os.getenv("POSTGRESQL_PROJ_PATH", r"C:\Program Files\PostgreSQL\17\share\contrib\postgis-3.6\proj\proj.db")
🟢 低优先级(可选优化)
5. 默认值中的硬编码
位置:
backend/app/config.py:33-34
问题:
OLLAMA_API_URL: str = "http://127.0.0.1:11434/api/generate"
DEFAULT_VLM_MODEL: str = "qwen3-vl:8b"
说明:
- 这些是默认值,已经通过
os.getenv()读取 - 但默认值本身是硬编码的
修复方案:
- 保持现状(默认值是合理的)
- 或者在文档中明确说明这些默认值
修复优先级
| 优先级 | 问题 | 影响 | 修复难度 |
|---|---|---|---|
| 🔴 P0 | Ollama API 地址 | 高 | 低 |
| 🔴 P0 | Nginx 健康检查地址 | 中 | 低 |
| 🔴 P0 | 后端绑定地址 | 高 | 低 |
| 🟡 P1 | PROJ 路径检查 | 低 | 低 |
| 🟢 P2 | 默认值硬编码 | 低 | 无需修复 |
修复计划
阶段 1:立即修复(P0)
-
修改
backend/app/ai_service.py- 添加
OLLAMA_BASE_URL环境变量 - 修改 API 调用使用动态 URL
- 添加
-
修改
backend/app/services/health_service.py- 添加
OLLAMA_BASE_URL和NGINX_HEALTH_URL环境变量 - 修改健康检查使用动态 URL
- 添加
-
修改
run_backend.py- 添加
BACKEND_BIND_HOST环境变量 - 支持配置绑定地址
- 添加
-
更新
.env文件- 添加新的配置项和注释
-
更新文档
- 在部署文档中说明这些配置项
阶段 2:建议修复(P1)
- 修改
scripts/check_proj.py- 支持从环境变量读取 PostgreSQL 路径
- 或自动检测 PostgreSQL 安装路径
验证方法
1. 配置文件验证
检查 .env 文件是否包含所有必需的配置项:
# 必需配置
DATABASE_URL=...
IDL_EXECUTABLE=...
IDL_DINSAR_DEM_BASE_FILE=...
# 新增配置
OLLAMA_BASE_URL=http://127.0.0.1:11434
NGINX_HEALTH_URL=http://127.0.0.1/
BACKEND_BIND_HOST=127.0.0.1
2. 代码审计
运行以下命令检查是否还有硬编码:
# 检查绝对路径
grep -r "C:\\\\" backend/ --include="*.py"
grep -r "D:\\\\" backend/ --include="*.py"
# 检查 IP 地址
grep -r "127\.0\.0\.1" backend/ --include="*.py"
grep -r "localhost" backend/ --include="*.py"
# 检查端口号
grep -r ":11434" backend/ --include="*.py"
grep -r ":8000" backend/ --include="*.py"
3. 部署测试
在不同环境测试:
- 本地开发环境:使用默认配置
- Docker 容器:修改
BACKEND_BIND_HOST=0.0.0.0 - 远程 Ollama:修改
OLLAMA_BASE_URL=http://192.168.1.100:11434 - 自定义端口:修改
PORT=18000
部署检查清单
在部署到客户环境前,确认:
- 所有路径配置在
.env中 - 所有 IP 地址/端口配置在
.env中 - 没有硬编码的绝对路径
- 没有硬编码的 IP 地址
- 没有硬编码的端口号
- 所有配置项都有默认值(合理的)
- 所有配置项都有注释说明
- 部署文档已更新
相关文档
.env配置文件docs/PROJ_CONFIGURATION.md- PROJ 数据库配置docs/DEPLOYMENT.md- 部署文档(待创建)
总结
当前状态:
- ✅ 大部分配置已通过
.env管理 - ❌ 发现 3 个高优先级硬编码问题
- ⚠️ 需要立即修复以支持生产部署
修复后:
- ✅ 所有配置通过
.env管理 - ✅ 支持多种部署场景
- ✅ 客户环境可自定义配置
- ✅ 无需修改代码即可部署