- Add advanced fuzzy matching with 7+ strategies (exact, prefix, substring, acronym, initials, fuzzy, Levenshtein) - Create comprehensive database of 500+ common Unix commands for smart autocompletion - Implement intelligent Tab completion with @ prefix injection for agents and files - Add sophisticated input pattern recognition for commands like "dao", "gp5", "py3" - Enhance mention system with TaskProgressMessage component for better user feedback - Update documentation with comprehensive intelligent completion guide - Clean up 21 temporary markdown files to maintain repository cleanliness - Improve project structure and configuration documentation - Optimize completion system performance with advanced caching and scoring
436 lines
9.9 KiB
Markdown
436 lines
9.9 KiB
Markdown
# 安全模型
|
|
|
|
## 概述
|
|
|
|
Kode 实现了全面的安全模型,在可用性和安全性之间取得平衡。系统提供多层保护,防止潜在有害的操作,同时允许高级用户高效工作。
|
|
|
|
## 安全原则
|
|
|
|
### 1. 最小权限原则
|
|
操作被授予最小必要权限。工具只请求它们需要的特定权限。
|
|
|
|
### 2. 明确的用户同意
|
|
潜在危险的操作需要明确的用户批准,并清楚地解释风险。
|
|
|
|
### 3. 纵深防御
|
|
多个安全层确保单一故障不会危及系统。
|
|
|
|
### 4. 透明度
|
|
所有操作都被记录并可审计。用户可以看到 AI 正在做什么。
|
|
|
|
### 5. 安全默认值
|
|
系统默认为更安全的选项,更宽松的模式需要明确选择加入。
|
|
|
|
## 安全模式
|
|
|
|
### 宽松模式(默认)
|
|
平衡安全性和可用性:
|
|
- 自动批准安全的读取操作
|
|
- 提示文件写入和系统命令
|
|
- 为会话缓存批准
|
|
- 适用于受信任的环境
|
|
|
|
### 安全模式(--safe 标志)
|
|
对敏感环境的最大安全性:
|
|
- 所有操作都需要批准
|
|
- 无自动批准
|
|
- 无缓存权限
|
|
- 详细的操作描述
|
|
- 适用于生产系统
|
|
|
|
```bash
|
|
# 启用安全模式
|
|
kode --safe
|
|
|
|
# 特定操作的安全模式
|
|
kode --safe -p "更新生产配置"
|
|
```
|
|
|
|
## 权限系统架构
|
|
|
|
```
|
|
┌─────────────────────────────────────────┐
|
|
│ 权限请求 │
|
|
└─────────────────────────────────────────┘
|
|
↓
|
|
┌─────────────────────────────────────────┐
|
|
│ 检查权限类型 │
|
|
├─────────────────────────────────────────┤
|
|
│ • 无需权限(只读) │
|
|
│ • 会话权限(临时) │
|
|
│ • 持久权限(保存) │
|
|
│ • 始终询问(关键) │
|
|
└─────────────────────────────────────────┘
|
|
↓
|
|
┌─────────────────────────────────────────┐
|
|
│ 权限解析 │
|
|
├─────────────────────────────────────────┤
|
|
│ 1. 检查缓存权限 │
|
|
│ 2. 检查会话权限 │
|
|
│ 3. 检查持久权限 │
|
|
│ 4. 如需要则提示用户 │
|
|
└─────────────────────────────────────────┘
|
|
↓
|
|
┌─────────────────────────────────────────┐
|
|
│ 执行或拒绝 │
|
|
└─────────────────────────────────────────┘
|
|
```
|
|
|
|
## 权限类型
|
|
|
|
### 1. 文件系统权限
|
|
|
|
#### 读取权限
|
|
- 自动授予项目目录
|
|
- 限制系统目录
|
|
- 隐藏文件需要明确权限
|
|
|
|
```typescript
|
|
interface FileReadPermission {
|
|
path: string
|
|
recursive: boolean
|
|
includeHidden: boolean
|
|
maxDepth?: number
|
|
}
|
|
```
|
|
|
|
#### 写入权限
|
|
- 始终需要明确批准
|
|
- 路径验证以防止遍历
|
|
- 为现有文件创建备份
|
|
|
|
```typescript
|
|
interface FileWritePermission {
|
|
path: string
|
|
operation: 'create' | 'modify' | 'delete'
|
|
createBackup: boolean
|
|
}
|
|
```
|
|
|
|
### 2. 命令执行权限
|
|
|
|
#### 命令批准模式
|
|
命令与批准模式匹配:
|
|
|
|
```json
|
|
{
|
|
"allowedCommands": [
|
|
"git *", // 所有 git 命令
|
|
"npm test", // 特定命令
|
|
"bun run *", // 模式匹配
|
|
"echo *" // 安全命令
|
|
]
|
|
}
|
|
```
|
|
|
|
#### 受限命令
|
|
永不允许,即使有权限:
|
|
|
|
```typescript
|
|
const RESTRICTED_COMMANDS = [
|
|
'rm -rf /',
|
|
'format',
|
|
'fdisk',
|
|
'dd',
|
|
'mkfs',
|
|
':(){:|:&};:', // Fork 炸弹
|
|
]
|
|
```
|
|
|
|
### 3. 网络权限
|
|
|
|
#### API 访问
|
|
- API 密钥安全存储
|
|
- 强制执行速率限制
|
|
- 用于审计的请求日志
|
|
|
|
#### 网页获取
|
|
- URL 验证
|
|
- 带限制的重定向跟随
|
|
- 内容大小限制
|
|
|
|
### 4. MCP 服务器权限
|
|
|
|
#### 服务器批准
|
|
- 项目范围的服务器批准
|
|
- 基于功能的权限
|
|
- 运行时沙箱
|
|
|
|
```typescript
|
|
interface MCPServerPermission {
|
|
serverName: string
|
|
capabilities: string[]
|
|
scope: 'project' | 'global'
|
|
autoApprove: boolean
|
|
}
|
|
```
|
|
|
|
## 安全功能
|
|
|
|
### 1. 路径遍历防护
|
|
|
|
```typescript
|
|
function validatePath(requestedPath: string, allowedBase: string): boolean {
|
|
const resolved = path.resolve(requestedPath)
|
|
const base = path.resolve(allowedBase)
|
|
|
|
// 防止在允许的目录外遍历
|
|
if (!resolved.startsWith(base)) {
|
|
throw new SecurityError('检测到路径遍历')
|
|
}
|
|
|
|
// 检查符号链接
|
|
const realPath = fs.realpathSync(resolved)
|
|
if (!realPath.startsWith(base)) {
|
|
throw new SecurityError('检测到符号链接逃逸')
|
|
}
|
|
|
|
return true
|
|
}
|
|
```
|
|
|
|
### 2. 命令注入防护
|
|
|
|
```typescript
|
|
function sanitizeCommand(command: string): string {
|
|
// 拒绝带有危险字符的命令
|
|
const dangerous = /[;&|<>$`]/
|
|
if (dangerous.test(command)) {
|
|
throw new SecurityError('检测到危险的命令字符')
|
|
}
|
|
|
|
// 使用数组执行以防止注入
|
|
const [cmd, ...args] = shellQuote.parse(command)
|
|
return { cmd, args }
|
|
}
|
|
```
|
|
|
|
### 3. 资源限制
|
|
|
|
```typescript
|
|
interface ResourceLimits {
|
|
maxFileSize: number // 默认 10MB
|
|
maxOutputSize: number // 默认 1MB
|
|
maxExecutionTime: number // 默认 2 分钟
|
|
maxConcurrentOps: number // 默认 10
|
|
maxMemoryUsage: number // 默认 500MB
|
|
}
|
|
```
|
|
|
|
### 4. 审计日志
|
|
|
|
```typescript
|
|
interface AuditLog {
|
|
timestamp: Date
|
|
operation: string
|
|
tool: string
|
|
input: any
|
|
result: 'approved' | 'denied' | 'error'
|
|
user: string
|
|
sessionId: string
|
|
}
|
|
|
|
function logSecurityEvent(event: AuditLog) {
|
|
// 写入安全审计日志
|
|
appendToAuditLog(event)
|
|
|
|
// 检测可疑模式时发出警报
|
|
if (detectSuspiciousPattern(event)) {
|
|
alertSecurity(event)
|
|
}
|
|
}
|
|
```
|
|
|
|
## 权限 UI 组件
|
|
|
|
### 权限请求对话框
|
|
|
|
```typescript
|
|
interface PermissionRequest {
|
|
title: string
|
|
description: string
|
|
risks: string[]
|
|
operation: {
|
|
tool: string
|
|
action: string
|
|
target: string
|
|
}
|
|
options: {
|
|
approve: boolean
|
|
deny: boolean
|
|
alwaysAllow: boolean
|
|
saveForSession: boolean
|
|
}
|
|
}
|
|
```
|
|
|
|
### 视觉指示器
|
|
|
|
- 🔒 **锁定**:需要权限
|
|
- ✅ **批准**:权限已授予
|
|
- ❌ **拒绝**:权限被拒绝
|
|
- ⚠️ **警告**:潜在危险
|
|
- 🛡️ **安全模式**:增强安全激活
|
|
|
|
## 安全最佳实践
|
|
|
|
### 对于用户
|
|
|
|
1. **为生产系统使用安全模式**
|
|
2. **批准前审查命令**
|
|
3. **将权限限制为必要的操作**
|
|
4. **定期审计权限授予**
|
|
5. **使用环境变量保护 API 密钥**
|
|
|
|
### 对于开发者
|
|
|
|
1. **使用 Zod 模式验证所有输入**
|
|
2. **在工具设计中使用最小权限**
|
|
3. **在权限请求中清晰的风险沟通**
|
|
4. **使用安全默认值安全失败**
|
|
5. **记录安全事件以供审计跟踪**
|
|
|
|
## 威胁模型
|
|
|
|
### 潜在威胁
|
|
|
|
1. **恶意提示**
|
|
- **威胁**:用户欺骗 AI 进行有害操作
|
|
- **缓解**:权限系统、命令验证
|
|
|
|
2. **路径遍历**
|
|
- **威胁**:访问项目外的文件
|
|
- **缓解**:路径验证、符号链接检查
|
|
|
|
3. **命令注入**
|
|
- **威胁**:执行非预期的命令
|
|
- **缓解**:命令清理、数组执行
|
|
|
|
4. **资源耗尽**
|
|
- **威胁**:消耗过多资源
|
|
- **缓解**:资源限制、超时
|
|
|
|
5. **数据泄露**
|
|
- **威胁**:泄露敏感信息
|
|
- **缓解**:网络限制、审计日志
|
|
|
|
## 安全配置
|
|
|
|
### 全局安全设置
|
|
|
|
```json
|
|
{
|
|
"security": {
|
|
"mode": "permissive",
|
|
"maxFileSize": 10485760,
|
|
"maxExecutionTime": 120000,
|
|
"auditLogging": true,
|
|
"restrictedPaths": [
|
|
"/etc",
|
|
"/sys",
|
|
"/proc",
|
|
"~/.ssh"
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
### 项目安全策略
|
|
|
|
```json
|
|
{
|
|
"security": {
|
|
"allowedCommands": [
|
|
"git *",
|
|
"npm test",
|
|
"npm run build"
|
|
],
|
|
"allowedPaths": [
|
|
"./src",
|
|
"./tests",
|
|
"./docs"
|
|
],
|
|
"deniedTools": [
|
|
"bash"
|
|
],
|
|
"requireApproval": [
|
|
"file_write",
|
|
"file_delete"
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
## 紧急程序
|
|
|
|
### 安全事件响应
|
|
|
|
1. **立即行动**
|
|
```bash
|
|
# 终止所有 Kode 进程
|
|
pkill -f kode
|
|
|
|
# 撤销 API 密钥
|
|
kode config remove -g apiKey
|
|
|
|
# 全局启用安全模式
|
|
kode config set -g security.mode safe
|
|
```
|
|
|
|
2. **调查**
|
|
```bash
|
|
# 检查修改的文件
|
|
git status
|
|
git diff
|
|
|
|
# 审查权限授予
|
|
kode security permissions list
|
|
```
|
|
|
|
3. **恢复**
|
|
```bash
|
|
# 重置权限
|
|
kode security reset
|
|
|
|
# 从备份恢复
|
|
git restore .
|
|
|
|
# 更新安全设置
|
|
kode config set security.mode safe
|
|
```
|
|
|
|
## 安全监控
|
|
|
|
### 指标和警报
|
|
|
|
```typescript
|
|
interface SecurityMetrics {
|
|
permissionRequests: number
|
|
deniedOperations: number
|
|
suspiciousPatterns: number
|
|
resourceViolations: number
|
|
auditLogSize: number
|
|
}
|
|
|
|
function monitorSecurity() {
|
|
// 检查异常
|
|
if (metrics.deniedOperations > threshold) {
|
|
alert('拒绝操作数量过多')
|
|
}
|
|
|
|
// 模式检测
|
|
if (detectAttackPattern(auditLog)) {
|
|
alert('检测到潜在的安全威胁')
|
|
}
|
|
}
|
|
```
|
|
|
|
### 合规性
|
|
|
|
- **审计跟踪**:所有操作都被记录
|
|
- **访问控制**:基于角色的权限
|
|
- **数据保护**:敏感数据加密
|
|
- **事件响应**:记录的程序
|
|
- **定期审查**:安全审计和更新
|
|
|
|
安全模型确保 Kode 提供强大的功能,同时保持对意外和恶意伤害的强大保护。分层方法允许用户为其环境选择适当的安全级别,同时保持可用性。 |