🔒 Agent Skills 安全指南

别让你的Skill成为黑客的后门

安全开发 权限控制 漏洞扫描

妙趣导读:2026年5月18日凌晨2点33分,我突然从梦里惊醒——我写的那个Skill里,是不是把API Key硬编码进去了?那一刻的冷汗,比Debug三天三夜还多。安全不是选修课,是生死线。本文教你如何写出安全的Agent Skills。

📋 为什么Skills安全很重要?

⚠️ 真实风险场景
  • 敏感信息泄露 - Skill代码中硬编码的API Key、密码被公开到GitHub
  • 命令注入 - 未经验证的用户输入直接拼接到shell命令
  • 权限滥用 - Skill申请了超出需求的系统权限
  • 恶意依赖 - 引入了含有后门的第三方包
  • 数据泄露 - Skill无意中读取并上传了用户隐私文件

🛡️ 安全风险清单

1. 敏感信息硬编码

风险:将API Key、密码等写入代码并推送到公开仓库

错误示例:

# ❌ 错误 - 硬编码敏感信息
const apiKey = "sk-8c9a771dfac5ce26a4ec12b3d7d8f7a5";
const dbPassword = "mySecretPassword123";

正确做法:

# ✅ 正确 - 使用环境变量
const apiKey = process.env.API_KEY;
const dbPassword = process.env.DB_PASSWORD;
// 并在SKILL.md中说明需要配置的环境变量

2. 命令注入漏洞

风险:用户输入未经验证直接拼接到shell命令

# ❌ 错误 - 命令注入风险
const userInput = req.body.filename;
exec(`rm -rf ${userInput}`); // 如果用户输入:"~/.ssh; cat /etc/passwd"

# ✅ 正确 - 使用参数化或验证
const path = require('path');
const safePath = path.resolve('/allowed/dir', userInput);
exec(`rm -rf ${safePath}`);

3. 过度权限申请

风险:Skill申请了不需要的权限(如读写全磁盘)

# ❌ 错误 - 过度权限
{
  "permissions": ["filesystem:read", "filesystem:write", "network", "system"]
}

# ✅ 正确 - 最小权限原则
{
  "permissions": ["filesystem:read:/var/www/miaoquai/tools"]
}

🔍 使用安全扫描器

妙趣AI开发了openclaw-skill-security-scanner,自动化检测Skills安全问题:

# 安装扫描器
npm install -g openclaw-skill-security-scanner

# 扫描单个Skill
openclaw-skill-security-scanner scan ./my-skill/

# 扫描整个Skills目录
openclaw-skill-security-scanner scan /path/to/skills/

# 生成详细报告
openclaw-skill-security-scanner scan ./my-skill/ --output report.json --format json

安全评分系统

A-F

扫描器会根据以下维度给出A-F的安全评分:

  • A - 无安全问题(90-100分)
  • B - 轻微问题(70-89分)
  • C - 需要关注(50-69分)
  • D - 存在风险(30-49分)
  • F - 严重漏洞(0-29分)

💡 安全最佳实践

✅ 开发阶段
  • 使用.env.example模板,不要提交真实的.env文件
  • .gitignore中添加敏感文件规则
  • 定期使用安全扫描器检查代码
  • 引入依赖前检查其安全性和维护状态
✅ SKILL.md规范
  • 在SKILL.md中明确声明所需权限
  • 说明需要配置的环境变量及其用途
  • 提供安全配置示例(不包含真实凭据)
  • 添加安全相关的最佳实践提示
📋 发布前安全检查清单
  • ☐ 运行openclaw-skill-security-scanner获得A/B评分
  • ☐ 检查代码中没有硬编码的敏感信息
  • ☐ 验证所有外部输入都经过处理
  • ☐ 确认权限申请遵循最小权限原则
  • ☐ 检查依赖包是否有已知漏洞(npm audit)
  • ☐ 在沙箱环境中测试Skill行为

🚨 应急响应

如果发现Skill存在安全问题:

1. 立即从公开仓库删除或设为private
2. 撤销所有泄露的API Key/密码
3. 检查是否有异常