mxivideo/docs/mixvideo-security-optimizat...

7.5 KiB

MixVideo 安全配置优化建议

基于当前项目配置的安全优化方案

📊 当前配置分析

🔍 现有配置

{
  "security": {
    "csp": "default-src 'self' ipc: http://ipc.localhost; img-src 'self' asset: http://asset.localhost data:; media-src 'self' asset: http://asset.localhost; video-src 'self' asset: http://asset.localhost; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'",
    "assetProtocol": {
      "enable": true,
      "scope": ["**"]
    }
  }
}

⚠️ 安全风险评估

配置项 风险级别 问题描述 影响
scope: ["**"] 🔴 高风险 允许访问所有文件系统 可能泄露敏感文件
'unsafe-inline' 🟡 中风险 允许内联脚本和样式 XSS 攻击风险
缺少 devCsp 🟡 中风险 开发和生产使用相同策略 开发体验受限
缺少 freezePrototype 🟢 低风险 未防护原型污染 潜在安全隐患

🎯 优化建议

1. 立即优化 (高优先级)

AssetProtocol Scope 限制

{
  "assetProtocol": {
    "enable": true,
    "scope": [
      "$HOME/.mixvideo/**",
      "$APPDATA/mixvideo/**",
      "$TEMP/mixvideo/**",
      "$HOME/Videos/**",
      "$HOME/Movies/**",
      "$DESKTOP/**",
      "$DOCUMENT/**"
    ]
  }
}

优势:

  • 限制文件访问范围
  • 防止访问系统敏感文件
  • 保持功能完整性

2. CSP 策略优化

推荐配置

{
  "security": {
    "csp": {
      "default-src": ["'self'"],
      "connect-src": ["'self'", "ipc:", "http://ipc.localhost"],
      "img-src": ["'self'", "asset:", "http://asset.localhost", "data:"],
      "media-src": ["'self'", "asset:", "http://asset.localhost"],
      "video-src": ["'self'", "asset:", "http://asset.localhost"],
      "script-src": ["'self'", "'unsafe-inline'"],
      "style-src": ["'self'", "'unsafe-inline'"],
      "font-src": ["'self'", "data:"]
    },
    "devCsp": {
      "default-src": ["'self'", "'unsafe-eval'"],
      "connect-src": ["'self'", "ipc:", "http://ipc.localhost", "ws:", "wss:"],
      "img-src": ["'self'", "asset:", "http://asset.localhost", "data:"],
      "media-src": ["'self'", "asset:", "http://asset.localhost"],
      "video-src": ["'self'", "asset:", "http://asset.localhost"],
      "script-src": ["'self'", "'unsafe-inline'", "'unsafe-eval'"],
      "style-src": ["'self'", "'unsafe-inline'"],
      "font-src": ["'self'", "data:"]
    }
  }
}

优势:

  • 分离开发和生产环境
  • 支持热重载 ('unsafe-eval' 仅开发环境)
  • 支持 WebSocket 连接 (开发环境)

3. 完整优化配置

生产就绪配置

{
  "app": {
    "security": {
      "csp": {
        "default-src": ["'self'"],
        "connect-src": ["'self'", "ipc:", "http://ipc.localhost"],
        "img-src": ["'self'", "asset:", "http://asset.localhost", "data:"],
        "media-src": ["'self'", "asset:", "http://asset.localhost"],
        "video-src": ["'self'", "asset:", "http://asset.localhost"],
        "script-src": ["'self'", "'unsafe-inline'"],
        "style-src": ["'self'", "'unsafe-inline'"],
        "font-src": ["'self'", "data:"],
        "object-src": ["'none'"],
        "base-uri": ["'self'"],
        "form-action": ["'self'"]
      },
      "devCsp": {
        "default-src": ["'self'", "'unsafe-eval'"],
        "connect-src": ["'self'", "ipc:", "http://ipc.localhost", "ws://localhost:*", "wss://localhost:*"],
        "img-src": ["'self'", "asset:", "http://asset.localhost", "data:"],
        "media-src": ["'self'", "asset:", "http://asset.localhost"],
        "video-src": ["'self'", "asset:", "http://asset.localhost"],
        "script-src": ["'self'", "'unsafe-inline'", "'unsafe-eval'"],
        "style-src": ["'self'", "'unsafe-inline'"],
        "font-src": ["'self'", "data:"],
        "object-src": ["'none'"],
        "base-uri": ["'self'"],
        "form-action": ["'self'"]
      },
      "assetProtocol": {
        "enable": true,
        "scope": [
          "$HOME/.mixvideo/**",
          "$APPDATA/mixvideo/**",
          "$LOCALAPPDATA/mixvideo/**",
          "$TEMP/mixvideo/**",
          "$HOME/Videos/**",
          "$HOME/Movies/**",
          "$HOME/Pictures/**",
          "$DESKTOP/**",
          "$DOCUMENT/**",
          "$DOWNLOAD/**"
        ]
      },
      "freezePrototype": true,
      "dangerousDisableAssetCspModification": false
    }
  }
}

🔄 迁移步骤

步骤 1: 备份当前配置

cp src-tauri/tauri.conf.json src-tauri/tauri.conf.json.backup

步骤 2: 渐进式更新

2.1 首先限制 AssetProtocol Scope

{
  "assetProtocol": {
    "enable": true,
    "scope": [
      "$HOME/.mixvideo/**",
      "$APPDATA/mixvideo/**",
      "$TEMP/mixvideo/**",
      "$HOME/Videos/**",
      "$HOME/Movies/**"
    ]
  }
}

2.2 测试基本功能

  • 视频导入
  • 视频播放
  • 文件保存

2.3 添加开发环境 CSP

{
  "devCsp": {
    "default-src": ["'self'", "'unsafe-eval'"],
    "connect-src": ["'self'", "ipc:", "http://ipc.localhost", "ws:", "wss:"],
    "img-src": ["'self'", "asset:", "http://asset.localhost", "data:"],
    "media-src": ["'self'", "asset:", "http://asset.localhost"],
    "video-src": ["'self'", "asset:", "http://asset.localhost"],
    "script-src": ["'self'", "'unsafe-inline'", "'unsafe-eval'"],
    "style-src": ["'self'", "'unsafe-inline'"],
    "font-src": ["'self'", "data:"]
  }
}

2.4 转换生产 CSP 为对象格式

{
  "csp": {
    "default-src": ["'self'"],
    "connect-src": ["'self'", "ipc:", "http://ipc.localhost"],
    "img-src": ["'self'", "asset:", "http://asset.localhost", "data:"],
    "media-src": ["'self'", "asset:", "http://asset.localhost"],
    "video-src": ["'self'", "asset:", "http://asset.localhost"],
    "script-src": ["'self'", "'unsafe-inline'"],
    "style-src": ["'self'", "'unsafe-inline'"],
    "font-src": ["'self'", "data:"]
  }
}

步骤 3: 验证和测试

3.1 功能测试清单

  • 视频文件导入
  • 视频播放和预览
  • 图片资源显示
  • 模板导入和使用
  • 项目保存和加载
  • Python 脚本执行
  • 开发热重载

3.2 安全测试

  • 尝试访问系统敏感文件
  • 检查 CSP 违规报告
  • 验证文件访问权限

🚨 注意事项

1. Windows 路径兼容性

确保 scope 配置支持 Windows 路径:

{
  "scope": [
    "$APPDATA/mixvideo/**",
    "$LOCALAPPDATA/mixvideo/**",
    "C:\\Users\\*\\Videos\\**",
    "C:\\Users\\*\\Documents\\**"
  ]
}

2. 开发环境特殊需求

  • 保留 'unsafe-eval' 用于热重载
  • 添加 WebSocket 支持用于开发服务器
  • 允许 localhost 连接

3. 生产环境安全

  • 移除所有 unsafe-* 指令(除非必要)
  • 严格限制文件访问范围
  • 启用原型冻结保护

📈 预期收益

安全性提升

  • 🔒 文件系统保护: 限制访问范围,防止敏感文件泄露
  • 🛡️ XSS 防护: 更严格的 CSP 策略
  • 🔐 原型污染防护: 启用 freezePrototype

开发体验

  • 🚀 热重载支持: 开发环境允许 eval
  • 🔧 调试友好: WebSocket 和开发工具支持
  • 性能优化: 更精确的资源加载策略

维护性

  • 📝 配置清晰: 对象格式更易读和维护
  • 🔄 环境分离: 开发和生产配置独立
  • 📊 监控友好: 更好的 CSP 违规报告

建议在测试环境中先验证配置,确认功能正常后再应用到生产环境