【问题标题】:Encrypting Stripe customer and firebase user ids加密 Stripe 客户和 firebase 用户 ID
【发布时间】:2023-02-17 07:23:43
【问题描述】:

是否需要在 NextJS 环境中加密 Stripe 客户 ID?我有一个 NextJS API 路由,它根据 Firestore 数据库中的 Stripe 客户 ID 更新客户电子邮件地址(Firebase 的 Stripe 扩展):

const {
  email = '',
  name = '',
  customerId = ''
} = req.body;

const customer = await stripe.customers.update(
  customerId, {
  email,
  name
  }
);

这看起来像一个线程,因为其他可能猜到 Stripe 客户 ID 的人可以更新该值。是否应该将所有与 Stripe 支付相关的功能更好地迁移到 Firebase Functions,或者公开它是否安全?想想设置意图……它们有何不同?

更新:

useEffect(() => {
  const { stripeId } = authUser || {};

  if (stripeId) {
    fetch('/api/setup_intent', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ customerId: stripeId })
    })
    .then((res) => res.json())
    .then((data) => setClientSecret(data.clientSecret));
  }
}, [authUser]);

【问题讨论】:

  • 在 Stripe 文档中,他们清楚地将必须从客户端(浏览器、移动应用程序)和服务器(后端)完成的操作分开。当它是后端时,您应该使用一些云功能。
  • 这似乎很大程度上是您根据自己的要求做出的决定。在 Next.js 中使用 API 路由时,您主要关心的是什么?它们似乎是服务器端的,因此它们似乎可以合理地发出需要使用您的 Stripe 密钥的请求。如果关心的是确保到达路由的请求是有效的和预期的,那么我认为您会希望向该路由添加所需的验证。帖子中的问题写得有点宽泛,帖子可能会受益于被编辑以提出更有针对性/具体的问题。
  • 对于 Firebase UID,请参见:stackoverflow.com/a/37222341
  • @toby 基本上,我将 Stripe ID 存储在 Firestore 数据库中,然后获取该数据库,并将其作为上下文传递给整个应用程序。这是启动设置和付款意图所必需的(请参阅 Updated 块)。您是否认为这应该重构到 NextJS 的服务器端,并且在某种程度上违反了安全性?
  • 客户 ID 本身并不敏感,因为除非还可以访问该帐户的 API 密钥,否则无法使用带有该 ID 的 Stripe API 执行任何操作,因此我的初步印象是公开这些 ID 不会带来安全风险。话虽这么说,如果您所依赖的客户 ID 是由您的客户端代码提供的,那么我相信精明的用户可以调整您的客户端请求中提供的值,并且这可能是一个问题。

标签: reactjs firebase google-cloud-firestore next.js stripe-payments


【解决方案1】:

将其发布为社区 wiki 以帮助将遇到此问题的其他成员:

正如@toby 所述:

客户 ID 本身并不敏感,因为无法采取任何措施 使用带有该 ID 的 Stripe API,除非还可以访问 该帐户的 API 密钥,所以我的初步印象是公开 这些不是安全风险。也就是说,如果客户 ID 你所依赖的是由你的客户端代码提供的,那么我 相信精明的用户可以调整该值 在您的客户端请求中提供,这可能是 忧虑。

【讨论】:

    猜你喜欢
    • 2022-09-26
    • 1970-01-01
    • 2018-06-27
    • 2014-12-03
    • 1970-01-01
    • 2015-12-26
    • 2021-06-11
    • 2018-04-25
    • 1970-01-01
    相关资源
    最近更新 更多