Stripe - 在服务器上安全地处理付款

Stripe - Securely handling payments on the server

提问人:non 提问时间:8/19/2023 更新时间:8/19/2023 访问量:47

问:

我在前端 (React) 中使用 Stripe Elements 来获取支付信息和所有内容。目前,我在前端有一个函数,可以直接运行,其中和。后端服务器 (Express) 处理可发布密钥并创建支付意图,并在创建意图时发回 pk 和客户端密钥。但是,我想将所有支付逻辑移动到服务器,以避免任何潜在的数据捏造客户端。handleSubmitawait stripe.confirmPayment({ elements, ... })const elements = useElements();const stripe = useStripe();

首先,这是个好主意吗?首先,在前端确认付款是一个坏主意

其次,我将如何实际将用户的支付数据发送到服务器?通过发布请求来做这件事是否安全,Stripe 是否提供了一种方法来做到这一点(例如,我可以将客户端密钥发送回服务器以处理支付意图)?

如果这是一个愚蠢的问题,我们深表歉意。我想,这是我第一次处理付款并严重担心安全性。

安全 HTTPS 条带 支付处理 PCI-DSS

评论


答:

1赞 Lucky2501 8/19/2023 #1

首先,这是个好主意吗?

在我看来不是。

首先,如果您的 Stripe 帐户是新的,它根本不会让您这样做 - 请参阅此线程作为示例。

此外,这样做将要求您符合 PCI 标准,并使用 SAQ 表格向 Stripe 和 PCI 机构证明这一点:
https://stripe.com/docs/security/guide

使用前端 Stripe iframe (Elements) 收集银行卡详细信息(或 Stripe Checkout 等其他解决方案)是最省心的选择。

/ 功能也很方便,因为它们可以收集付款详细信息,在必要时进行身份验证,并一次性尝试收费。
在服务器端实现这些操作中的每一个都需要更多的工作。
confirmPaymentconfirmXxxPayment

也就是说,您希望尽可能地将集成与前端分离是正确的 - 这可能是您应用程序中最脆弱的点。

因此,您应该执行以下操作:
- 不要将订单总额的数字金额从客户端传递到服务器 - >改用项目 dics。
- 不要依赖前端重定向和 url 参数来启动成功订单的流程 - >用 webhook 通知自己。
- 确保验证这些 Webhook 的来源,并为它们实现幂等性逻辑(不仅适用于重放攻击,Stripe webhook 可以多次发送)。