Firebase 如何提高我的可调用云函数的安全性?
我想在我的移动应用程序上为我的Firestore数据库创建一个搜索功能,因此我将使用弹性搜索产品(Swiftype),如果我提出更多搜索请求,那么它将更加昂贵(大约10万个请求/10美元,数据将通过restful API传输) 我担心会有一个恶意用户,可以在短时间内发出数千个请求,这会破坏我的账单。因此,为了确保安全并避免恶意用户,我制作了一个类似这样的可调用云功能,因为我还在我的移动应用程序上使用Firebase身份验证Firebase 如何提高我的可调用云函数的安全性?,firebase,firebase-authentication,google-cloud-functions,Firebase,Firebase Authentication,Google Cloud Functions,我想在我的移动应用程序上为我的Firestore数据库创建一个搜索功能,因此我将使用弹性搜索产品(Swiftype),如果我提出更多搜索请求,那么它将更加昂贵(大约10万个请求/10美元,数据将通过restful API传输) 我担心会有一个恶意用户,可以在短时间内发出数千个请求,这会破坏我的账单。因此,为了确保安全并避免恶意用户,我制作了一个类似这样的可调用云功能,因为我还在我的移动应用程序上使用Firebase身份验证 exports.performFullTextSearch = func
exports.performFullTextSearch = functions.https.onCall(async (data, context) => {
if (context.auth) {
// make request to Elastic Search
} else {
// perform rejection
}
})
使用上述代码可以安全地防止恶意用户吗?我可以提高安全性吗?很抱歉,我实际上是一名Android和iOS开发人员。因此我对后端的知识有限是的,您的代码是正确的,可以避免任何经过身份验证的用户运行弹性搜索。只需使用
return null;
结束云功能,如下所示低点
exports.performFullTextSearch = functions.https.onCall(async (data, context) => {
if (context.auth) {
// make request to Elastic Search
} else {
return null;
}
})
完整地说,请注意,未经身份验证的用户将能够调用云函数(导致一次云函数调用),但将无法在
if
块的第一部分运行代码。如今,没有什么可以说是安全的
如果您确实对请求数量感到紧张,可以通过一种变通方法,您可以对用户在特定时间段内的请求数量施加限制(这对于普通用户)
假设在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给出的代码片段之外,我还回答了这个问题。在检查用户是否通过身份验证后(如代码片段中所示),我的答案可以实现。@sarah我知道你没有接受答案。有什么具体原因吗?如果你需要更多帮助或关于我答案的更多细节,请毫不犹豫地与我联系,这样我们就能找到解决方案。