【问题标题】:Is it secure to send the user UID to firebase cloud functions将用户 UID 发送到 Firebase 云功能是否安全
【发布时间】:2021-04-30 00:31:19
【问题描述】:

我有一个 firestore 集合,每个用户都有一个文档。文档名称等于用户 UID。

我使用 firebase 功能写入这些文档。所以我将用户 UID 传递给这个 firebase 云函数,以便该函数可以写入数据库(这只是一个非常简单的写入,所以我不会在这里展示)。

这是我的js文件中的函数调用:

const saveAllTimeData = firebase.functions().httpsCallable('saveAllTimeData');
saveAllTimeData({ data: firebase.auth().currentUser.uid })

但我不太确定这是否安全。

在执行之前不能只是有人更改firebase.auth().currentUser.uid 部分吗?和 f.e.放入另一个 uid 来更改他不应该更改的文档?

【问题讨论】:

    标签: javascript firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    用户的 UID 可以安全地共享,因为 UID 就像指纹一样,可以区分和识别用户和其他用户。这些不会以任何方式授予该用户的权限或权力,它只是一组随机的唯一字符。

    使用 Admin SDK,您还可以为每个设计创建这些 UID,如果需要,您可以拥有一个可以代表其用户名的自定义 UID。

    由于您还使用了 httpsCallable 云函数,这包括一个名为 context 的值,它使用来自 auth 模块的 JWT 令牌。 JWT 令牌对用户是可解码的,不应共享。但是,httpsCallable 方法通过 HTTPS 隧道保护它,使其免受大多数劫持。

    在你的函数中,你应该注意上下文变量

    exports.addMessage = functions.https.onCall((data, context) => {
      // ...
    });
    

    对于 onCall,上下文包含一个名为 auth 的属性,其中包含解码后的 JWT 值

    // Message text passed from the client.
    const text = data.text;
    // Authentication / user information is automatically added to the request.
    const uid = context.auth.uid;
    const name = context.auth.token.name || null;
    const picture = context.auth.token.picture || null;
    const email = context.auth.token.email || null;
    

    参考

    【讨论】:

    • 但是听说,执行前可以改js。不能有人将这个函数重写为: const saveAllTimeData = firebase.functions().httpsCallable('saveAllTimeData'); saveAllTimeData({ data: "另一个用户的 uid" })
    • 可以修改所有请求,但主要的收获是 uid 不是也不应该用于定义用户权限,仅用于标识。相反,您应该查看我的帖子中提到的 JWT。我会尽快更新参考资料
    • 在您的云功能中,您将检查用户的权限,并验证他们的请求。 JWT 令牌每 1 小时过期一次,因此请求不太可能被劫持和重复。您还可以使 JWT 过期以确保所有请求的 JWT 都是唯一的,但这超出了此问题的范围
    • 所以不用将 uid 作为参数传递,我可以使用 context.auth.uid 访问它,这样可以确保用户将数据写入自己的文档?
    • 正确。另外,如果您正在将数据写入文档,为什么不使用规则和数据库模块的组合呢?
    猜你喜欢
    • 2019-03-22
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2018-08-05
    • 2019-02-23
    • 2017-10-26
    • 2018-06-01
    • 1970-01-01
    相关资源
    最近更新 更多