跳转至

智能知识系统 - 深度安全审查报告

⚠️ **归档文档 — 数据已过时** 本报告为历史快照存档。当前版本 **v1.3.0-dev**,232 测试通过。 👉 最新工程状态请参阅 **[ENGINEERING_ALIGNMENT.md](ENGINEERING_ALIGNMENT.md)**

审查日期: 2026-03-25 审查范围: 全栈应用安全扫描 审查方法: OWASP Top 10 + 依赖漏洞 + 凭证安全 + Docker安全


执行摘要

安全评分: 68/100 (中等风险)

级别 数量 状态
P0 (立即修复) 8 :x: 高危
P1 (本周内) 12 :warning: 中危
P2 (本月内) 6 :notebook_with_decorative_cover: 低危

总体评估

项目在安全中间件实现方面表现良好,有完善的JWT认证、CSRF保护、速率限制和安全响应头。但存在以下主要问题:

  1. 默认凭证暴露 - Docker配置中包含弱密码
  2. 依赖漏洞 - 发现43个已知安全漏洞
  3. 硬编码凭证 - 代码中存在硬编码的数据库密码
  4. 部分SQL注入风险 - 使用ILIKE进行模糊搜索

1. 依赖漏洞分析

1.1 安全扫描结果

使用 safety 工具扫描发现 43个已知漏洞

严重程度 数量 示例
高危 5 cryptography, certifi
中危 18 requests, urllib3, lxml
低危 20 各种工具库

1.2 关键依赖版本问题

依赖 当前版本 修复建议 CVE
certifi 2023.11.17 >= 2024.2.2 CVE-2024-0734
cryptography 41.0.7 >= 42.0.0 多个CVE
urllib3 2.0.7 >= 2.2.0 CVE-2024-37891
lxml 5.2.1 >= 5.3.0 XXE风险

1.3 修复建议

# 更新关键依赖
pip install --upgrade certifi cryptography urllib3 lxml

# 使用pip-audit定期扫描
pip-audit --desc

# 配置 Dependabot 自动更新

2. OWASP Top 10 检查结果

A01:2021 – 注入 (Injection)

检查项 状态 位置 风险等级
SQL注入 :warning: 需关注 backend/main.py:397-413 中危
命令注入 :white_check_mark: 安全 - -
LDAP注入 N/A - -

问题详情:

  1. ILIKE 模糊搜索 (backend/main.py:397-413)
    search_pattern = f"%{q}%"
    rows = await pool.fetch(
        "SELECT ... WHERE title ILIKE $1 OR content ILIKE $1",
        search_pattern, limit
    )
    
  2. 风险: 使用 % 通配符可能导致性能问题(DoS)
  3. 修复建议:

    • 添加搜索字符串长度限制
    • 使用全文搜索 (pgvector/tsvector)
    • 限制特殊字符
  4. 数据库连接字符串暴露 (analytics/scripts/*.py)

    DATABASE_URL = "postgresql+asyncpg://tcm_admin:tcm_secure_pass_2024@..."
    

  5. 位置: data_importer.py:39, data_generator.py:38, performance_analyzer.py:36
  6. 修复: 移至环境变量

优先级: P1

A02:2021 – 认证失效 (Broken Authentication)

检查项 状态 位置 风险等级
JWT实现 :white_check_mark: 良好 backend/auth/jwt.py -
令牌黑名单 :white_check_mark: 实现 TokenBlacklist类 -
会话管理 :white_check_mark: 良好 backend/auth/middleware.py -

优点: - 使用 RS256 非对称加密 - 实现了令牌黑名单 - 支持令牌自动刷新 - 生产环境强制要求密钥配置

建议: - 添加令牌重放攻击检测 - 实现多因素认证 (MFA)

A03:2021 – 数据暴露 (Data Exposure)

检查项 状态 位置 风险等级
错误信息泄露 :warning: 部分问题 多个文件 低危
敏感数据日志 :white_check_mark: 良好 middleware/safe_error_messages.py -
.env文件保护 :white_check_mark: 正确忽略 .gitignore -

发现的问题:

  1. docker-compose.yml 中明文密码 (P0)
    POSTGRES_PASSWORD: zhineng123
    REDIS_PASSWORD: redis123
    GF_SECURITY_ADMIN_PASSWORD: admin123
    
  2. 修复: 使用 Docker secrets 或环境变量

  3. .env.example 中的默认凭证 (P1)

    POSTGRES_PASSWORD=zhineng_secure_2024
    MINIO_USER=minioadmin
    MINIO_PASSWORD=minioadmin123
    

  4. 修复: 移除默认值或使用强占位符

A04:2021 – XML 外部实体 (XXE)

检查项 状态 风险等级
XML解析 N/A (未使用XML) -
lxml使用 :warning: 潜在风险 低危

建议: 更新lxml到最新版本

A05:2021 – 访问控制 (Broken Access Control)

检查项 状态 风险等级
RBAC实现 :white_check_mark: 良好 backend/auth/rbac.py
路径保护 :white_check_mark: 良好 AuthMiddleware
权限检查 :white_check_mark: 实现 -

发现: RBAC系统实现完善,但需要测试确认所有端点都有权限检查

A06:2021 – 安全配置错误 (Security Misconfiguration)

检查项 状态 位置 风险等级
CORS配置 :warning: 可改进 backend/main.py:183-189 中危
CSP策略 :warning: 过于宽松 middleware/security_headers.py 中危
HSTS :notebook: 未启用 backend/main.py:216 低危
调试信息 :white_check_mark: 已禁用 - -

问题详情:

  1. CORS 开发环境默认值
    if not origins_str:
        return ["http://localhost:3000", "http://localhost:8008", ...]
    
  2. 风险: 生产环境可能回退到开发默认值
  3. 当前缓解: 生产环境强制检查并抛出异常

  4. CSP 中 unsafe-inline

    "script-src 'self' 'unsafe-inline' 'unsafe-eval';"
    

  5. 风险: 降低XSS防护效果
  6. 修复: 使用nonce或hash

A07:2021 – 跨站脚本 (XSS)

检查项 状态 风险等级
输出转义 :white_check_mark: 部分实现 backend/main.py:450-451
CSP头 :warning: 需加强 middleware/security_headers.py
JSON响应 :white_check_mark: 良好 -

良好实践:

# backend/main.py:450-451
safe_title = html.escape(s['title'])
safe_content = html.escape(s['content'][:150])

A08:2021 – 不安全的反序列化

检查项 状态 风险等级
pickle使用 :white_check_mark: 未使用 -
JSON反序列化 :white_check_mark: 安全 -
Pydantic验证 :white_check_mark: 良好 -

A09:2021 – 安全日志不足 (Insufficient Logging)

检查项 状态 风险等级
认证日志 :white_check_mark: 实现 多处
错误日志 :white_check_mark: 实现 -
审计日志 :warning: 部分实现 中危

建议: 添加完整的审计日志记录所有敏感操作

A10:2021 – 服务器端请求伪造 (SSRF)

检查项 状态 风险等级
URL验证 :warning: 需检查 低危
外部API调用 :notebook: 限制域 backend/services/reasoning/*.py

建议: 对所有外部URL调用进行白名单验证


3. 凭证安全分析

3.1 硬编码密钥扫描

文件 问题 优先级
analytics/config/analytics_config.py:31 "password": "tcmpassword" P0
analytics/scripts/data_importer.py:39 数据库密码硬编码 P0
analytics/scripts/data_generator.py:38 数据库密码硬编码 P0
analytics/scripts/performance_analyzer.py:36 数据库密码硬编码 P0
docker-compose.yml 多个弱密码 P0

3.2 .gitignore 检查

:white_check_mark: 正确配置:

.env
.env.local
config/secrets/

3.3 环境变量使用

:white_check_mark: 良好实践:

# backend/auth/jwt.py:184-195
if environment in ("production", "prod"):
    raise ValueError(
        "安全错误: RSA密钥对在生产环境必须通过环境变量提供。"
    )


4. Docker 安全分析

4.1 Dockerfile 检查

backend/Dockerfile - :white_check_mark: 良好

# 非root用户运行
RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app
USER appuser

services/qigong/Dockerfile - :x: 问题

# 缺少非root用户
# 建议添加:
RUN useradd -m -u 1000 appuser
USER appuser

4.2 docker-compose.yml 安全问题

问题 严重程度 修复建议
明文密码 P0 使用 secrets
弱密码 P0 使用强随机密码
暴露端口 P1 限制绑定地址
无健康检查部分服务 P2 添加 healthcheck

4.3 修复示例

# 使用 Docker Secrets
services:
  postgres:
    secrets:
      - postgres_password
    environment:
      POSTGRES_PASSWORD_FILE: /run/secrets/postgres_password

secrets:
  postgres_password:
    external: true

5. API 安全检查

5.1 认证授权

检查项 状态
JWT认证 :white_check_mark: RS256实现
令牌刷新 :white_check_mark: 自动刷新
令牌吊销 :white_check_mark: 黑名单实现
权限检查 :white_check_mark: RBAC

5.2 输入验证

检查项 状态
Pydantic验证 :white_check_mark: 全面使用
长度限制 :white_check_mark: min_length/max_length
类型检查 :white_check_mark: 类型注解
模式验证 :white_check_mark: pattern正则

5.3 速率限制

:white_check_mark: 完善实现: - InMemoryRateLimiter (开发) - RedisRateLimiter (生产) - TokenBucket 算法 - 端点级别限制

5.4 CORS 配置

# backend/main.py:139-177
def get_allowed_origins() -> list[str]:
    if environment in ("production", "prod"):
        if not origins_str:
            raise ConfigError("ALLOWED_ORIGINS 必须设置")

:white_check_mark: 生产环境强制验证


6. 中间件安全检查

6.1 已实现的安全中间件

中间件 状态 文件
CSRF 保护 :white_check_mark: middleware/csrf_protection.py
安全响应头 :white_check_mark: middleware/security_headers.py
速率限制 :white_check_mark: middleware/rate_limiter.py
安全错误消息 :white_check_mark: middleware/safe_error_messages.py

6.2 安全响应头配置

X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: [限制敏感API]

:white_check_mark: 全面实现


7. 修复优先级清单

P0 - 立即修复 (高危)

  1. 移除硬编码密码
  2. analytics/config/analytics_config.py:31
  3. analytics/scripts/*.py 中的 DATABASE_URL
  4. 修复: 移至环境变量

  5. 修改 docker-compose.yml 弱密码

  6. 当前: zhineng123, redis123, admin123
  7. 修复: 使用 Docker secrets 或强随机密码

  8. 更新依赖漏洞

    pip install --upgrade certifi cryptography urllib3 lxml
    

  9. 添加 services/qigong/Dockerfile 非 root 用户

P1 - 本周内修复 (中危)

  1. 加强 CSP 策略
  2. 移除 unsafe-inlineunsafe-eval
  3. 使用 nonce 或 hash

  4. 限制 ILIKE 搜索

  5. 添加输入长度限制
  6. 考虑使用全文搜索

  7. 添加 SSRF 防护

  8. 对外部URL进行白名单验证

  9. 完善审计日志

  10. 记录所有敏感操作

  11. 测试所有端点的权限检查

P2 - 本月内修复 (低危)

  1. 启用 HSTS (生产环境)
  2. 添加 Docker healthcheck
  3. 实现令牌重放攻击检测
  4. 考虑 MFA 实现
  5. 添加文件上传验证

8. 安全最佳实践建议

8.1 开发流程

  1. 启用 pre-commit hook

    pip install pre-commit
    # .pre-commit-config.yaml
    - repo: https://github.com/PyCQA/bandit
      hooks:
        - id: bandit
    

  2. 定期安全扫描

    # 依赖扫描
    pip-audit
    
    # 代码扫描
    bandit -r backend/
    
    # Secrets扫描
    trufflehog git .
    

  3. CI/CD 安全检查

  4. 集成 SAST/DAST 扫描
  5. 自动化依赖更新
  6. 容器镜像扫描

8.2 部署安全

  1. 使用密钥管理服务
  2. AWS Secrets Manager
  3. Azure Key Vault
  4. HashiCorp Vault

  5. 容器安全

    # 使用非基础镜像
    FROM python:3.12-slim
    
    # 扫描镜像
    docker scan zhineng-api
    
    # 签名镜像
    docker trust sign zhineng-api:latest
    

  6. 网络隔离

  7. 使用 Docker 网络
  8. 限制容器间通信
  9. 配置防火墙规则

8.3 运行时安全

  1. 日志监控
  2. 集中日志收集
  3. 异常检测告警
  4. 定期审计

  5. 备份安全

  6. 加密备份
  7. 离线存储
  8. 定期恢复测试

  9. 事件响应

  10. 制定响应计划
  11. 定期演练
  12. 事后分析

9. 合规性检查

标准 状态 备注
OWASP Top 10 :warning: 68% 主要问题已识别
SOC 2 :notebook: 部分实现 需完善审计日志
GDPR :notebook: 需检查 数据处理评估
PCI DSS N/A 不处理支付

10. 总结

优势

  1. :white_check_mark: 完善的安全中间件体系
  2. :white_check_mark: 使用 RS256 JWT 认证
  3. :white_check_mark: 实现了 CSRF 保护
  4. :white_check_mark: 多种速率限制算法
  5. :white_check_mark: 生产环境安全检查
  6. :white_check_mark: 使用 Pydantic 进行输入验证
  7. :white_check_mark: .gitignore 正确配置

需改进

  1. :x: 移除硬编码凭证 (P0)
  2. :x: 更新有漏洞的依赖 (P0)
  3. :warning: 加强 CSP 策略 (P1)
  4. :warning: 限制 ILIKE 搜索 (P1)
  5. :notebook: 启用 HSTS (P2)
  6. :notebook: 添加容器镜像扫描 (P2)

下一步行动

  1. 立即 (24小时内):
  2. [ ] 修复所有 P0 硬编码密码
  3. [ ] 更新关键依赖
  4. [ ] 修改 docker-compose.yml 凭证

  5. 本周:

  6. [ ] 加强 CSP 策略
  7. [ ] 限制 ILIKE 搜索
  8. [ ] 添加 SSRF 防护

  9. 本月:

  10. [ ] 启用 HSTS
  11. [ ] 实现审计日志
  12. [ ] 配置 CI/CD 安全扫描

审查人: Claude Opus 4.6 审查工具: grep, safety, pip-audit, 手动代码审查 审查版本: commit [需要Git仓库]