【问题标题】:Firebase cloud functions securityFirebase 云功能安全
【发布时间】:2019-03-22 14:01:15
【问题描述】:

我正在使用带有 admin sdk 的 firebase 云功能,以便代表用户对实时数据库执行一些操作。

例如,如果用户想在数据库中存储一个新参数,它将在其依赖于直接可调用函数 (onCall) 的 android 客户端上按下一个按钮。这个可调用函数会将参数保存在数据库中的正确位置。

现在,我了解到onCall函数会在context参数中自动接收一些关于用户的信息,例如用户id和token,但我不知道这些参数是否用于控制用户的有效身份.

由于该功能是在完全权限模式下使用 admin sdk 运行的,所以我想确保用户是他声称的那个人。如果一个用户窃取了另一个用户的uid,并用这个uid调用了函数,但使用了自己的Auth token,他会被检测到吗?

该函数是否检查用户 id (uid) 是否符合 Auth 令牌?

如果是,我唯一要做的就是检查 context.auth 是否与 null 不同?

【问题讨论】:

  • 确认一下,android 客户端正在调用云函数,然后通过管理 API 访问 firestore/db。如果是这样,请查看stackoverflow.com/questions/42751074/… 了解如何保护该功能。
  • 好的,我的android客户端使用firebase客户端库,所以我可以依赖callable函数而不是简单的Https触发函数。在您链接的问题中,其中一个答案指出可调用函数可确保用户的真实性,但我仍然不明白该函数是否仅控制令牌,或者还控制令牌-uid 合规性。
  • auth.uid 已经过验证,因此您可以指望它有效/匹配令牌。但是,Firebase 管理 API 不运行安全规则,因此您需要确保您的更新或查询验证用户具有访问权限。
  • 我还是不明白。验证 auth.uid 是什么意思?如果因为匹配token而被验证,ok,我确定用户的真实性。
  • auth.uid 是从 android 函数作为参数传递的,还是在服务器端通过令牌自动生成?

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


【解决方案1】:

只是从 cmets 开始,context.auth.uid 值在服务器端经过验证,因此您可以相信用户没有操纵该值。 (参见代码here。)现在,当您使用firestore 或realtime db admin API 时,该函数可以访问数据库中的任何值,因此您需要确保用户可以访问数据库中的值(即添加 where uid='uid')。

【讨论】:

  • 我想确保只有登录用户才能执行可调用函数。将可调用函数代码包装在if(context.auth.user.uid){} 块中是否安全?或者是否可以锁定对其代码本身之外的函数的访问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 2018-12-28
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 2017-10-12
  • 2018-11-29
相关资源
最近更新 更多