firebase 服务器端请求的Firestore安全规则

egdjgwm8  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(124)

从去年秋天开始我就开始使用Flutter-fire
注意:服务器客户端库会绕过所有Cloud Firestore安全规则,而是通过Google应用程序默认凭据进行身份验证。如果您使用的是服务器客户端库或REST或RPC API,请确保为Cloud Firestore设置了身份和访问管理(IAM)。
上面的评论来自firebase team的link。听起来像是“服务器客户端库”或apis在评论中表示来自我的移动的应用程序之外的请求,他们绕过了云firestore安全规则。但是当我在未经许可的情况下尝试用我的应用程序中的一个请求与Postman进行相同的get请求时,Postman控制台的响应很好。这意味着出现了权限拒绝错误。
所以,我的问题来了。我希望知道什么类型的请求是完全等效于这些“服务器客户端库”或“REST或RPC API”在官方参考中提到,绕过所有的安全规则。 Postman 正是“REST”,和firebase工作如我所愿(产生了权限拒绝)在这种情况下非常完美。所以一定有一些特定的类型,Firebase团队实际上打算参考要小心。
我知道firebase-admin sdk是可能的服务器端库之一,但是当我们试图访问firebase admin sdk时,应该需要完全相同的权限或授权程序,firebase admin sdk可以像firebase团队评论的那样,在安全规则之上控制firebase数据。所以问题集中在可能的攻击者解决方案上,他们可以在没有适当安全程序的情况下恶意操纵我们的firebase。
希望一些firebase大师能用令人敬畏的知识和经验给予很酷的答案!提前谢谢你[:

ruarlubt

ruarlubt1#

正如其名称所示,服务器客户端库将从服务器或“可信环境”(如Cloud Functions)中使用。
当从服务器(或可信环境)与Firebase服务器API交互时,您不会像从客户端应用程序进行身份验证那样进行身份验证。服务器应使用Google service accounts,而不是通过Firebase身份验证服务创建的用户帐户(例如电子邮件/密码帐户)。更多详细信息请参阅Firebase文档。
请注意,对于云函数,您初始化Admin SDK时不带任何参数。在这种情况下,SDK使用Google应用程序默认凭据(与您在问题中提到的文档摘录完全相同)。
因此,当您的服务器(或Cloud Function)与Firebase服务器API交互时,由于它是通过服务帐户进行身份验证的,因此请求会绕过所有Cloud Firestore安全规则。换句话说,如果您希望根据特定参数/值执行某些检查以允许/禁止特定操作,则必须在代码中执行这些检查。
REST API也是一样的,可以从客户端应用程序(Web应用程序、Flutter应用程序等)或服务器使用REST API。
根据它是客户端还是服务器,您应该使用Firebase身份验证ID令牌或服务帐户(以及Google Identity OAuth 2.0令牌)进行身份验证,如documentation中所详细说明的。
因此,当您在未经许可的情况下使用Postman向API发出请求时,API会检测到没有与该请求关联的Google Identity OAuth 2. 0令牌或Firebase Authentication ID令牌,然后强制执行安全规则=〉您会得到一个“权限被拒绝错误”。
总之,如果您正确地定义了安全规则,就不会遇到任何“攻击者恶意操纵”数据库的问题。
但是请注意,仅基于auth != null的安全规则可能不足以保护您的数据,如answer中所述。

相关问题