AI 安全最佳实践
安全使用 AI,保护数据和隐私。
🔐 安全风险
常见风险
| 风险类型 | 说明 | 影响 |
|---|---|---|
| 数据泄露 | 敏感信息被 AI 记录 | 高 |
| Prompt 注入 | 恶意输入操控 AI | 中 |
| 越权访问 | AI 执行未授权操作 | 高 |
| 输出污染 | AI 生成有害内容 | 中 |
🛡️ 防护策略
1. 数据脱敏
❌ 直接发送敏感信息:
用户张三,身份证 110101199001011234,
银行卡 6222021234567890123✅ 脱敏后发送:
用户张*,身份证 110101********1234,
银行卡 6222***********1234代码实现:
javascript
function desensitize(text) {
return text
.replace(/(\d{6})\d{8}(\d{4})/, '$1********$2') // 身份证
.replace(/(\d{4})\d{12}(\d{4})/, '$1***********$2'); // 银行卡
}2. 输入验证
javascript
// 验证输入长度
if (input.length > 1000) {
throw new Error('输入过长');
}
// 过滤危险字符
const safeInput = input
.replace(/<script>/gi, '')
.replace(/javascript:/gi, '');
// 验证格式
if (!isValidJSON(input)) {
throw new Error('无效格式');
}3. 权限控制
javascript
// 检查用户权限
async function executeCommand(user, command) {
// 检查权限
const hasPermission = await checkPermission(user, command);
if (!hasPermission) {
logAttempt(user, command);
throw new Error('权限不足');
}
// 执行命令
return await execute(command);
}4. 输出过滤
javascript
// 过滤敏感信息
function filterOutput(output) {
return output
.replace(/\b\d{18}\b/g, '[身份证已隐藏]')
.replace(/\b\d{16,19}\b/g, '[银行卡已隐藏]')
.replace(/\b1[3-9]\d{9}\b/g, '[手机号已隐藏]');
}
// 检查有害内容
async function checkSafety(output) {
const isSafe = await ai.checkSafety(output);
if (!isSafe) {
throw new Error('内容不安全');
}
return output;
}5. 审计日志
javascript
// 记录所有操作
async function logAction(user, action, result) {
await db.insert('audit_log', {
user: user.id,
action: action,
result: result,
timestamp: Date.now(),
ip: user.ip
});
}
// 定期审查
async function reviewLogs() {
const suspicious = await db.query(`
SELECT * FROM audit_log
WHERE result = 'failed'
AND timestamp > NOW() - INTERVAL 1 DAY
`);
if (suspicious.length > 10) {
await sendAlert('异常操作过多');
}
}🔍 安全配置
OpenClaw 安全配置
json
{
"security": {
"sandbox": true,
"allowedCommands": ["ls", "cat", "grep"],
"blockedCommands": ["rm", "sudo", "curl"],
"maxTokens": 4096,
"timeout": 30000
},
"audit": {
"enabled": true,
"logLevel": "info",
"retention": 90
}
}API Key 保护
❌ 错误做法:
javascript
// 硬编码在代码中
const apiKey = "sk-1234567890abcdef";✅ 正确做法:
javascript
// 使用环境变量
const apiKey = process.env.AI_API_KEY;
// 或使用加密存储
const apiKey = await decryptSecret('ai-api-key');🚨 应急响应
发现泄露怎么办?
立即撤销
bash# 撤销 API Key openclaw keys revoke compromised-key修改密码
bash# 修改所有相关密码通知用户
javascriptawait notifyUsers('发现安全漏洞,请修改密码');调查原因
javascriptconst logs = await getLogs({ startTime: incidentTime, filter: 'security' });修复漏洞
javascriptawait patchVulnerability(); await updateSecurityPolicy();
📋 安全检查清单
开发阶段
- [ ] 代码审查
- [ ] 安全测试
- [ ] 渗透测试
- [ ] 依赖检查
部署阶段
- [ ] 配置检查
- [ ] 权限验证
- [ ] 日志配置
- [ ] 监控配置
运维阶段
- [ ] 定期更新
- [ ] 日志审查
- [ ] 漏洞扫描
- [ ] 备份验证
🎯 安全等级
基础安全
- [ ] 使用 HTTPS
- [ ] 密码加密存储
- [ ] 输入验证
- [ ] 错误日志
中级安全
- [ ] 双因素认证
- [ ] 访问控制
- [ ] 数据脱敏
- [ ] 审计日志
高级安全
- [ ] 零信任架构
- [ ] 实时监控
- [ ] 自动响应
- [ ] 定期演练
重要
安全无小事,宁可过度防护,不可掉以轻心!
🟢🐉 泡泡龙