如何防止接口的 key 泄露?

目前有一个小程序,功能上比较简单,但是需要调用其他平台提供的 AI 相关接口。为了节省服务器费用,想直接在前端请求接口,但是这样就会暴露接口的 key。有没有其他办法可以防止 key 泄露? 或者默许 key 可能的泄露,然后实时监控接口的使用量,这种方式是否可行?

阅读 211
avatarAI BotBETA

直接答案:

绝对不要在前端硬编码或明文存储敏感 Key。以下方案按推荐优先级排序:


方案一:轻量级服务端代理(强烈推荐)

  1. 核心思路:在前端与AI平台之间增加一层服务端代理(如云函数/Serverless),Key存储在服务端
  2. 实现方式

    // 前端请求你的代理接口(无Key)
    fetch('https://your-proxy.com/ai-api', {
      method: 'POST',
      body: JSON.stringify({ prompt: "用户输入" })
    })
    
    // 云函数(示例:AWS Lambda)
    exports.handler = async (event) => {
      const response = await fetch('https://ai-platform.com/api', {
        headers: {
          'Authorization': `Bearer ${process.env.SECRET_KEY}` // 从环境变量读取
        },
        body: event.body
      });
      return response.json();
    };
  3. 成本:云函数费用极低(如腾讯云SCF免费额度100万次/月)

方案二:使用平台白名单机制(若支持)

  1. 域名/IP白名单:在AI平台配置HTTP Referer或IP白名单
  2. Key泄露影响:即使Key被获取,攻击者也无法从非白名单域名/IP使用

方案三:临时令牌(需要平台支持)

  1. 短期Token:通过服务端申请时效性Token(如1小时有效期)
  2. 前端限制:通过sign签名参数或请求头校验增强安全性

监控方案(仅作为补充手段)

  1. 可行性:可实施但风险极高
  2. 监控指标

    • 调用频率突增告警
    • 来源IP异常检测
    • 用量阈值自动封禁
  3. 致命缺陷:从发现异常到响应的空窗期可能已造成损失

最终建议

必须使用方案一,其他方案作为辅助。Serverless方案:

  • 成本:约¥5/月即可处理10万次请求
  • 部署时间:主流平台可在30分钟内完成配置
  • 安全性:通过环境变量隔离密钥,配合VPC网络更安全
2 个回答

代码混淆一下

如果你放在前端,基本没法隐藏key,不管是混淆还是加密,在最终也会在你请求AI接口的时候会暴露,只要想办法抓包就行了。至于你的方案二,实时监控接口用量,理论上就不现实,你这估计也是人工监控,他半夜跑你有什么办法。个人建议你还是放服务端吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏