【问题标题】:Hiding api key with firebase function使用firebase功能隐藏api密钥
【发布时间】:2020-06-09 16:06:23
【问题描述】:

我正在尝试隐藏我的 reCAPTCHA 密钥,使其不会出现在我的前端 (React) 中。我不知道它有多大用处,但是如何向某个端点发出请求,然后在取回数据时将其设为componentDidMount。这听起来可能根本不安全,但解决这类问题的最佳解决方案是什么?


好的,所以我应该创建一个看起来与此类似的函数(我仍然不正确)

exports.captcha = functions.https.onRequest((req, res) => { 
//should i set the origin to be my domain.com here  
res.set('Access-Control-Allow-Origin', '*'); 
res.set('Access-Control-Allow-Methods', 'GET, PUT, POST, OPTIONS');   res.set('Access-Control-Allow-Headers', '*');  
if (req.method === 'OPTIONS') {
 res.end(); 
}  else {  
 cors(req, res, () => {
  if (req.method !== 'GET') { 
   return; 
 } 
   return res.send('Api key',(err,info)=> {
    if(err){
     return res.send(err.toString())
    }
      return res.send("sent")
    }  
 });  
}});

【问题讨论】:

  • 我认为如果您不想公开您的密钥、创建云功能并向其发送请求,您可以将 recaptcha 逻辑移至 firebase。不确定这是否有帮助

标签: reactjs firebase function api key


【解决方案1】:

只要在客户端代码中使用 API 密钥,恶意用户就可以获取并使用它。由于这正是您要防止的,唯一安全的解决方案是不在客户端代码中使用该 API 密钥。这意味着您需要将功能包装在服务器端代码中,并且只公开您想要的输入和输出。这也意味着您需要保护对 Cloud Functions 端点的访问(谁可以调用它以及他们可以做什么),因为不安全的访问相当于允许他们直接使用 API 密钥。

某些 API 密钥(例如用于 Firebase 的身份验证、实时数据库、Cloud Firestore 和 Cloud Storage 产品的密钥)允许您限制拥有这些密钥的用户在何处或如何使用这些产品。在这种情况下,最好将 API 密钥视为配置数据

【讨论】:

  • 肯定有错别字,和我之前设置的另一个函数不一样,也许我需要指定来源来自“say my domain.com”
  • @FrankvanPuffelen 感谢您的意见,关于隐藏第三方 API 密钥 Firebase 如何介入?,我目前使用 Firebase 实时数据库、身份验证、存储和云功能,但我没有找到任何教程关于如何隐藏第三方 API 密钥。
  • 您不应在客户端代码中使用此类 API 密钥。除此之外没有什么可以介入的了。如果您想知道如何在 Firebase 上运行服务器端代码,请查看 Cloud Functions。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 2021-04-30
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
相关资源
最近更新 更多