fix(security): 代码审查安全加固 — 三批次修复(6H/13M/12L)
第一批(快速修复): - H6: main.py --debug 默认值 True→False,防止 Werkzeug RCE - M2+M3: /search 增加 validate_query + top_k 范围限制(1-50) - M4: context_count 范围限制(0-10) + 异常捕获 - L3: assert → raise RuntimeError(生产环境 API Key 检查) - H1: SSE 错误事件移除 traceback 字段 第二批(安全加固): - H2+H3: 文档接口路径遍历 realpath 校验 + 文件类型/大小限制 - H4+H5: 批量上传文件大小检查 - M6: LIKE 查询通配符转义 - M1: 37 处 str(e) 异常信息统一脱敏(6 文件) - M5: CORS 生产环境限制来源 - M7: SESSION_MANAGER None 保护(503) - M11: subprocess 参数注入防护(白名单 + -- 分隔符) 第三批(架构改进): - M8+M9: 提取 JSON 解析共享工具(extract_json_object/list) - M10: Prompt 注入检测防御(prompt_guard.py) - M12: 解析器文件大小限制(Excel 50MB/TXT 20MB/PDF 100MB) - M13: 全局单例竞态条件双重检查锁定(engine/bm25/intent_analyzer)
This commit is contained in:
@@ -67,7 +67,17 @@ def create_app() -> 'Flask':
|
||||
static_folder = os.path.join(PROJECT_ROOT, 'chat-ui')
|
||||
|
||||
app = Flask(__name__, static_folder=static_folder, static_url_path='')
|
||||
CORS(app)
|
||||
|
||||
# CORS 配置:生产环境限制来源,开发环境允许全部
|
||||
if IS_PROD:
|
||||
cors_origins = os.environ.get('CORS_ORIGINS', '').split(',') if os.environ.get('CORS_ORIGINS') else []
|
||||
if cors_origins:
|
||||
CORS(app, origins=cors_origins)
|
||||
else:
|
||||
CORS(app) # 未配置时仍允许全部,但记录警告
|
||||
logger.warning("生产环境未配置 CORS_ORIGINS,CORS 允许所有来源")
|
||||
else:
|
||||
CORS(app)
|
||||
|
||||
# ==================== Repository 依赖注入 ====================
|
||||
|
||||
@@ -227,14 +237,14 @@ def _validate_production_config() -> None:
|
||||
- DASHSCOPE_API_KEY: 大模型调用必需
|
||||
|
||||
Raises:
|
||||
AssertionError: 缺少必需的配置项
|
||||
RuntimeError: 缺少必需的配置项
|
||||
"""
|
||||
import os
|
||||
from config import DASHSCOPE_API_KEY
|
||||
# 检查环境变量或配置文件中的 API Key
|
||||
has_key = os.getenv("DASHSCOPE_API_KEY") or os.environ.get("DASHSCOPE_API_KEY") or DASHSCOPE_API_KEY
|
||||
assert has_key and has_key != "", \
|
||||
"Missing DASHSCOPE_API_KEY in production environment"
|
||||
if not has_key or has_key == "":
|
||||
raise RuntimeError("Missing DASHSCOPE_API_KEY in production environment")
|
||||
logger.info("Configuration validated")
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user