第 8 / 8 节10 分钟
🔒

安全与隐私

中级

保护代码和数据的安全最佳实践

🎬

视频教程即将上线

安全与隐私

学习 OpenCode 的安全最佳实践,保护你的代码和数据。

# 安全概述#

使用 AI 编程助手时需要注意:

风险类型说明防护措施
数据泄露敏感信息发送给 AI内容过滤
代码注入AI 生成恶意代码代码审查
权限滥用AI 执行危险操作权限控制
隐私问题代码被用于训练选择合规服务

# 敏感信息保护#

## 自动过滤#

OpenCode 默认过滤敏感信息:

toml
1[security.filter]
2enabled = true
3
4# 自动检测并过滤的模式
5patterns = [
6  "password",
7  "api_key",
8  "secret",
9  "token",
10  "private_key",
11  "credential"
12]
13
14# 文件级别过滤
15exclude_files = [
16  ".env",
17  ".env.*",
18  "*.pem",
19  "*.key",
20  "credentials.json",
21  "secrets.yaml"
22]

## 手动标记#

在代码中标记敏感区域:

typescript
1// @opencode-ignore-start
2const SECRET_KEY = "super-secret-value";
3const DATABASE_URL = "postgresql://user:pass@host/db";
4// @opencode-ignore-end

## 脱敏显示#

❯ /context add src/config/database.ts

Adding file with redaction:
  Original: DATABASE_URL = "postgresql://user:pass@localhost/db"
  Redacted: DATABASE_URL = "postgresql://[REDACTED]@localhost/db"

# 执行权限控制#

## 沙箱模式#

限制 AI 的执行能力:

toml
1[security.sandbox]
2enabled = true
3
4# 允许的操作
5allow = [
6  "read_file",
7  "write_file",
8  "run_lint",
9  "run_test"
10]
11
12# 禁止的操作
13deny = [
14  "delete_file",
15  "execute_shell",
16  "network_access",
17  "system_call"
18]

## 确认机制#

危险操作需要确认:

❯ 删除 node_modules 目录

⚠️ 危险操作警告!
操作:删除目录
目标:node_modules (125,432 files)

这是一个不可逆操作。确认执行?[yes/NO]

## 白名单目录#

toml
1[security.paths]
2# 只允许访问这些目录
3allowed = [
4  "./src",
5  "./tests",
6  "./docs"
7]
8
9# 始终禁止访问
10denied = [
11  "~/.ssh",
12  "~/.aws",
13  "/etc"
14]

# 代码审查#

## 自动审查#

在执行 AI 生成的代码前自动审查:

toml
1[security.code_review]
2enabled = true
3
4# 检查项
5checks = [
6  "no_eval",           # 禁止 eval
7  "no_shell_exec",     # 禁止 shell 执行
8  "no_network_calls",  # 检查网络调用
9  "no_file_system",    # 检查文件系统操作
10]

## 危险模式检测#

❯ 帮我写一个执行用户输入的函数

⚠️ 安全警告:检测到潜在危险模式

生成的代码包含:
  - eval() 调用(第 5 行)
  - 未过滤的用户输入(第 3 行)

建议:
  1. 使用白名单验证输入
  2. 避免使用 eval
  3. 使用更安全的替代方案

是否继续?[y/N]

## 代码签名#

验证 AI 生成代码的来源:

toml
[security.signing]
enabled = true
verify_before_execute = true

# 网络安全#

## API 密钥管理#

bash
1# 使用环境变量,不要硬编码
2export OPENAI_API_KEY="sk-..."
3
4# 或使用密钥管理器
5opencode config set api_key --from-keychain

## 代理设置#

toml
1[network.proxy]
2http = "http://127.0.0.1:7890"
3https = "http://127.0.0.1:7890"
4
5# 不走代理的地址
6no_proxy = ["localhost", "127.0.0.1"]

## TLS 设置#

toml
1[network.tls]
2verify = true
3min_version = "1.2"
4ca_bundle = "/path/to/ca-bundle.crt"

# 审计日志#

## 启用审计#

toml
1[audit]
2enabled = true
3log_path = "~/.opencode/audit.log"
4
5# 记录的事件
6events = [
7  "file_read",
8  "file_write",
9  "file_delete",
10  "command_execute",
11  "api_call"
12]

## 查看日志#

❯ /audit log

Recent activities:
  [10:30:15] file_read: src/config.ts
  [10:30:16] api_call: OpenAI completions
  [10:30:20] file_write: src/config.ts
  [10:31:05] command_execute: npm test

## 导出报告#

❯ /audit export --format json --from 2024-01-01

Exported audit log to audit-2024-01.json

# 隐私保护#

## 数据存储#

toml
1[privacy.storage]
2# 本地存储,不上传
3location = "local"
4
5# 自动清理
6auto_cleanup = true
7retention_days = 30

## 遥测设置#

toml
1[privacy.telemetry]
2# 禁用所有遥测
3enabled = false
4
5# 或只允许匿名统计
6enabled = true
7anonymous = true
8exclude_code = true

## 模型提供商选择#

不同提供商的数据政策:

提供商数据用于训练数据保留
OpenAI API否(默认)30 天
Anthropic否按需
Azure OpenAI否可配置
本地模型否本地

# 企业安全#

## SSO 集成#

toml
1[enterprise.sso]
2provider = "okta"
3client_id = "xxx"
4issuer = "https://company.okta.com"

## 合规模式#

toml
1[enterprise.compliance]
2mode = "strict"
3
4# SOC2 合规
5soc2 = true
6
7# GDPR 合规
8gdpr = true
9
10# 数据驻留
11data_residency = "us-west"

## 访问控制#

toml
1[enterprise.access]
2# 基于角色的访问控制
3rbac = true
4
5# 最小权限原则
6least_privilege = true
7
8# 操作审批
9approval_required = ["delete", "deploy"]

# 安全检查清单#

## 日常使用#

  • 不在代码中硬编码密钥
  • 使用 .gitignore 排除敏感文件
  • 定期检查审计日志
  • 及时更新 OpenCode

## 团队使用#

  • 统一安全配置
  • 培训团队成员安全意识
  • 定期安全审计
  • 建立应急响应流程

## 企业部署#

  • 私有化部署或使用企业版
  • 配置网络隔离
  • 启用全面审计
  • 合规性评估

# 安全资源#

# 总结#

恭喜你完成了所有进阶教程!你已经掌握了:

  • ✅ 多模型配置
  • ✅ MCP 协议
  • ✅ 自定义工具
  • ✅ GitHub 集成
  • ✅ 记忆系统
  • ✅ Agent 模式
  • ✅ 自动化工作流
  • ✅ 安全与隐私

现在你已经是 OpenCode 高级用户了,可以充分利用它的强大功能提高开发效率!

继续探索:

← 上一节
自动化工作流
🎉 恭喜完成
你已掌握所有教程内容!