目前有一个小程序,功能上比较简单,但是需要调用其他平台提供的 AI 相关接口。为了节省服务器费用,想直接在前端请求接口,但是这样就会暴露接口的 key。有没有其他办法可以防止 key 泄露? 或者默许 key 可能的泄露,然后实时监控接口的使用量,这种方式是否可行?
目前有一个小程序,功能上比较简单,但是需要调用其他平台提供的 AI 相关接口。为了节省服务器费用,想直接在前端请求接口,但是这样就会暴露接口的 key。有没有其他办法可以防止 key 泄露? 或者默许 key 可能的泄露,然后实时监控接口的使用量,这种方式是否可行?
绝对不要在前端硬编码或明文存储敏感 Key。以下方案按推荐优先级排序:
实现方式:
// 前端请求你的代理接口(无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();
};
HTTP Referer
或IP白名单sign
签名参数或请求头校验增强安全性监控指标:
必须使用方案一,其他方案作为辅助。Serverless方案:
如果你放在前端,基本没法隐藏key,不管是混淆还是加密,在最终也会在你请求AI接口的时候会暴露,只要想办法抓包就行了。至于你的方案二,实时监控接口用量,理论上就不现实,你这估计也是人工监控,他半夜跑你有什么办法。个人建议你还是放服务端吧
即使你的加密做的再好也需要去请求
最便宜的最低核的都可以,后端程序非常小,仅利用接口,访问接口并转发即可,成本很低的;况且拥有一个服务器在很多方面都会方便很多,例如控制权限等
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答5.2k 阅读✓ 已解决
4 回答4.5k 阅读✓ 已解决
1 回答3.4k 阅读✓ 已解决
代码混淆一下