126 lines
5.3 KiB
Markdown
126 lines
5.3 KiB
Markdown
|
|
● 高优先级安全改进状态分析
|
|||
|
|
|
|||
|
|
基于对 aitsc 项目的检查,以下是高优先级安全改进的完成情况:
|
|||
|
|
|
|||
|
|
✅ 已完成的安全改进
|
|||
|
|
|
|||
|
|
新的配置系统已实现
|
|||
|
|
- 创建了 config/ 目录,包含 base.py、development.py、production.py、testing.py
|
|||
|
|
- 根目录和 src/flask_prompt_master/config.py 都添加了弃用警告
|
|||
|
|
- 新配置系统强制从环境变量读取敏感信息,否则抛出异常
|
|||
|
|
密码哈希算法已升级
|
|||
|
|
- auth_service.py 中已使用 bcrypt 哈希算法
|
|||
|
|
- 支持向后兼容 MD5(用于现有用户)
|
|||
|
|
- 新用户注册使用 bcrypt,安全性达标
|
|||
|
|
生产环境 CORS 配置已加固
|
|||
|
|
- production.py 中强制要求设置 CORS_ORIGINS 环境变量
|
|||
|
|
- 生产环境不能使用 ['*'],必须指定具体域名
|
|||
|
|
|
|||
|
|
⚠️ 仍需解决的安全问题
|
|||
|
|
|
|||
|
|
.env 文件中仍包含硬编码敏感信息
|
|||
|
|
- 数据库密码:!Rjb12191
|
|||
|
|
- DeepSeek API 密钥:sk-fdf7cc1c73504e628ec0119b7e11b8cc
|
|||
|
|
- 微信小程序密钥:89aa97dda3c1347c6ae3d6ab4627f1f4
|
|||
|
|
源代码中仍有多处硬编码
|
|||
|
|
- promptsTemplates.py 中硬编码数据库密码
|
|||
|
|
- 多个路由文件(如 android_tools.py)硬编码 API 密钥作为后备值
|
|||
|
|
- 多个部署脚本和文档文件包含敏感信息
|
|||
|
|
.env 文件管理问题
|
|||
|
|
- .env 文件不应提交到版本控制
|
|||
|
|
- 应使用 .env.example 作为模板,要求用户手动创建 .env
|
|||
|
|
|
|||
|
|
🔍 发现的具体文件
|
|||
|
|
|
|||
|
|
通过搜索发现的硬编码敏感信息文件:
|
|||
|
|
- .env 文件(包含完整的敏感信息)
|
|||
|
|
- src/flask_prompt_master/promptsTemplates.py(第4098、4108行有数据库密码)
|
|||
|
|
- 多个路由文件使用 os.environ.get('LLM_API_KEY') or 'sk-fdf7cc1c73504e628ec0119b7e11b8cc' 模式
|
|||
|
|
- 大量文档和部署脚本文件包含敏感信息
|
|||
|
|
|
|||
|
|
📋 建议的下一步修复
|
|||
|
|
|
|||
|
|
立即移除 .env 中的硬编码信息
|
|||
|
|
- 使用占位符替换真实密钥
|
|||
|
|
- 添加更详细的说明要求用户从控制台获取真实密钥
|
|||
|
|
清理源代码中的硬编码后备值
|
|||
|
|
- 移除所有 or 'hardcoded-key' 模式的后备值
|
|||
|
|
- 如果环境变量未设置,应抛出自定义异常而非使用默认值
|
|||
|
|
加强 .env 文件管理
|
|||
|
|
- 将 .env 添加到 .gitignore
|
|||
|
|
- 完善 .env.example 说明文档
|
|||
|
|
|
|||
|
|
虽然配置架构已改进,但只要源代码和 .env 文件中还存在硬编码敏感信息,安全风险就仍然存在。
|
|||
|
|
|
|||
|
|
● 根据分析,aitsc项目的高优先级安全改进已经部分完成。具体状态如下:
|
|||
|
|
|
|||
|
|
✅ 已解决的改进
|
|||
|
|
|
|||
|
|
配置系统重构
|
|||
|
|
- 新的配置系统位于 config/ 目录,支持多环境配置
|
|||
|
|
- 根目录 config.py 和 src/flask_prompt_master/config.py 已添加弃用警告
|
|||
|
|
- 强制从环境变量读取敏感信息,未设置时会抛出 ValueError
|
|||
|
|
密码哈希安全性升级
|
|||
|
|
- auth_service.py 已实现 bcrypt 哈希算法
|
|||
|
|
- 支持向后兼容 MD5(旧用户)
|
|||
|
|
- 新用户默认使用 bcrypt,盐值标识为 'bcrypt'
|
|||
|
|
生产环境 CORS 配置加固
|
|||
|
|
- config/production.py 中强制要求设置 CORS_ORIGINS 环境变量
|
|||
|
|
- 未设置或为空时会抛出异常
|
|||
|
|
|
|||
|
|
⚠️ 仍需解决的严重问题
|
|||
|
|
|
|||
|
|
1. 源代码中的硬编码敏感信息
|
|||
|
|
|
|||
|
|
多个Python文件中仍存在硬编码的敏感信息:
|
|||
|
|
|
|||
|
|
数据库密码 (!Rjb12191):
|
|||
|
|
- src/flask_prompt_master/promptsTemplates.py (4098行)
|
|||
|
|
- 至少10个其他脚本文件(部署、初始化脚本)
|
|||
|
|
DeepSeek API 密钥 (sk-fdf7cc1c73504e628ec0119b7e11b8cc):
|
|||
|
|
- src/flask_prompt_master/routes/android_tools.py (17行)
|
|||
|
|
- src/flask_prompt_master/routes/expert_generate_2.py
|
|||
|
|
- src/flask_prompt_master/routes/expert_generate_3.py
|
|||
|
|
- src/flask_prompt_master/routes/meal_planning.py (仍有硬编码)
|
|||
|
|
- 多个其他路由文件
|
|||
|
|
微信小程序密钥 (89aa97dda3c1347c6ae3d6ab4627f1f4):
|
|||
|
|
- 在 .env 文件和其他文档中
|
|||
|
|
|
|||
|
|
2. .env 文件中的硬编码
|
|||
|
|
|
|||
|
|
.env 文件仍然包含:
|
|||
|
|
- DATABASE_URL 中的数据库密码
|
|||
|
|
- LLM_API_KEY (DeepSeek API密钥)
|
|||
|
|
- WX_APPID 和 WX_SECRET (微信小程序凭据)
|
|||
|
|
|
|||
|
|
风险:.env 文件可能被意外提交到版本控制,导致敏感信息泄露。
|
|||
|
|
|
|||
|
|
3. 配置文件重复问题
|
|||
|
|
|
|||
|
|
虽然有了新的 config/ 系统,但两个旧配置文件的弃用警告仍不够彻底:
|
|||
|
|
- config.py (根目录)
|
|||
|
|
- src/flask_prompt_master/config.py
|
|||
|
|
|
|||
|
|
🔍 遗留的中优先级问题
|
|||
|
|
|
|||
|
|
大型数据文件 promptsTemplates.py (144KB)
|
|||
|
|
- 仍包含硬编码的数据库连接信息
|
|||
|
|
- 应考虑迁移到数据库存储
|
|||
|
|
API密钥使用不一致
|
|||
|
|
- 有些路由文件使用 os.environ.get('LLM_API_KEY') or '硬编码密钥' 模式
|
|||
|
|
- 应统一为强制从环境变量读取,去掉 fallback 硬编码
|
|||
|
|
|
|||
|
|
📋 建议的后续行动
|
|||
|
|
|
|||
|
|
立即行动(高优先级):
|
|||
|
|
1. 清理所有源代码中的硬编码敏感信息
|
|||
|
|
2. 将 .env 中的真实凭据替换为占位符
|
|||
|
|
3. 确保 .env 在 .gitignore 中,只提交 .env.example
|
|||
|
|
4. 更新所有路由文件,移除 API 密钥的硬编码 fallback
|
|||
|
|
|
|||
|
|
近期行动(中优先级):
|
|||
|
|
1. 将 promptsTemplates.py 的大数据迁移到数据库
|
|||
|
|
2. 完全移除旧的配置文件或重定向到新系统
|
|||
|
|
3. 统一 API 密钥获取逻辑
|
|||
|
|
|
|||
|
|
总结:配置架构已改进,但代码层面仍有严重的安全漏洞需要立即修复,否则新的配置系统无法提供实际安全保护。
|