【发布时间】: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