本文档描述了飞书 Dify 机器人系统中实施的安全措施,以保护系统及用户数据的安全性、完整性和可用性。
- Token 验证:所有来自飞书的事件都进行 Verification Token 验证,确保请求确实来自飞书平台。
- 事件去重:使用事件 ID 进行去重处理,防止重复处理同一事件导致的安全问题。
- 管理员权限模型:系统实现了管理员角色,只有被授权的管理员才能进行敏感操作。
- 初始化管理员安全:
init-admin命令只能在系统无管理员时使用,一旦设置,该命令自动失效。 - 管理员添加审核:新增管理员需要现有管理员授权,防止未授权的权限提升。
- 安全令牌:访问管理界面需要通过飞书机器人获取一次性登录链接,实现安全授权。
- 令牌时效管理:
- 管理令牌有效期限为 60 分钟,到期自动失效
- 支持主动注销令牌,即时终止会话
- 取消管理员权限会自动使其所有管理令牌失效
- 令牌安全存储:令牌以安全方式存储,使用数据库跟踪有效性和使用情况
- 敏感数据保护:API 密钥等敏感信息存储在数据库中,避免硬编码在代码中
- UTF-8 编码处理:所有数据统一使用 UTF-8 编码处理,避免字符编码漏洞
- 参数化查询:所有数据库操作使用参数化查询,防止 SQL 注入攻击
- 令牌分离:Webhook 使用双令牌机制:
- API Token:用于验证外部系统请求,高强度随机生成
- 配置 Token:用于用户订阅,独立于 API Token,降低暴露风险
- 令牌重生成:支持重新生成令牌,在令牌可能泄露时可立即撤销旧令牌
- Webhook 激活控制:支持启用/禁用 Webhook,在不需要时可临时停用
- 请求重试机制:使用指数退避策略处理暂时性错误,避免连续失败请求
- 超时控制:所有外部 API 调用设置超时限制,防止阻塞攻击
- 错误处理:全面的异常捕获和日志记录,确保系统稳定性
- 命令权限控制:根据用户权限限制可用命令,普通用户无法访问管理命令
- 输入验证:对所有用户输入进行有效性验证,防止注入攻击
- @消息过滤:在群组中,机器人只处理明确@它的消息,避免意外触发
- 日志记录:全面的日志记录,包括所有关键操作和错误,方便审计和问题排查
- 会话超时:用户会话设置自动超时机制,减少会话劫持风险
- 健康检查:提供
/ping接口用于系统健康监控
- 定期备份:建议定期备份数据库,保护重要配置和历史数据
- 令牌定期轮换:定期重新生成 Webhook Token 和管理员令牌
- 最小权限原则:仅向必要的用户授予管理员权限
- 配置环境变量:敏感配置如飞书 APP_ID、APP_SECRET 建议通过环境变量配置
- 定期检查日志:定期检查系统日志,及时发现异常活动
通过这些安全措施,系统能够在保持功能丰富性的同时,确保数据安全和系统稳定性。随着系统的持续发展,安全措施将不断完善和更新。