【问题标题】:how to increase the security of my callable cloud function?如何提高我的可调用云函数的安全性?
【发布时间】:2020-09-22 10:17:51
【问题描述】:

我想在我的移动应用程序上为我的 Firestore 数据库创建一个搜索功能,所以我将使用 Elastic Search 产品 (Swiftype),如果我发出更多搜索请求,那么它会更贵(大约 100.000 个请求/10 美元, 数据将通过他们的 RESTful API 传输

我担心会是一个恶意用户,可以在短时间内发出数千个请求,这会破坏我的账单。因此,为了确保安全并避免恶意用户,我制作了一个像这样的可调用云功能,因为我还在我的移动应用上使用 Firebase 身份验证

exports.performFullTextSearch = functions.https.onCall(async (data, context) => {

    if (context.auth) {

        // make request to Elastic Search

    } else {
 
        // perform rejection
    }

})

使用上面的代码防止恶意用户是否安全?我可以提高安全性吗?对不起,我实际上是一名 Android 和 iOS 开发人员。所以我对后端的了解有限

【问题讨论】:

    标签: firebase firebase-authentication google-cloud-functions


    【解决方案1】:

    是的,您的代码是正确的,可以避免任何经过身份验证的用户运行 Elastic Search。只需使用 return null; 结束 Cloud Function,如下所示。

    exports.performFullTextSearch = functions.https.onCall(async (data, context) => {
    
        if (context.auth) {
    
            // make request to Elastic Search
    
        } else {
            return null;
        }
    
    })
    

    为了完整起见,请注意未经身份验证的用户将能够调用 Cloud Function(导致一次 Cloud Function 调用),但无法运行 if 块的第一部分中的代码。

    【讨论】:

    • @sarah 我看到你不接受答案。有什么具体原因吗?如果您需要更多帮助或关于我的答案的更多详细信息,请随时与我联系,我们会通过这种方式找到解决方案。
    【解决方案2】:

    如今,没有什么可以说是安全的......

    如果您真的对请求数量感到紧张,可以通过一种变通方法来限制 用户 在特定时间段内的请求数量(应该普通用户就足够了)。

    假设您只允许在 10 分钟内发出 5 个请求。您在数据库中存储一个布尔变量:

    boolean isLimitExceeded;  
    

    它告诉你是否超过了用户的限制,你必须相应地更新。在您的函数中,您检查是否超出限制并相应地给出结果:

    if(isLimitExceeded){
        //reject
    } else {
       //perform the search
    } 
    

    显然,这会增加 Firebase Firestore 数据库的成本,但需要做出一些妥协!

    您也可以将其存储在本地设备中,但当然,您不能说用户何时清除数据。

    更新

    最终应该实现的代码是:

    if (context.auth) {
    
        if(isLimitExceeded){
    
           // limit is exceeded, reject
    
        } else {
    
          //limit not exceeded and the user is authenticated perform the search
    
        } 
    
    } else {
    
        // user is not authenticated , perform rejection
    }
    

    【讨论】:

    • 您好,如果用户未通过身份验证,您将如何识别他/她?
    • 除了@sarah给出的代码sn-p之外,我还回答了。检查用户是否通过身份验证(如代码sn-p)后,我的答案就可以实现了。
    猜你喜欢
    • 2019-02-25
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多