【发布时间】:2021-08-29 13:36:39
【问题描述】:
我的后端代码通常包装客户端调用并通过这样的端点公开它们:
import stripe
stripe.key = "API_KEY"
def wrap_create_customer():
return stripe.create_customer()
显然,可以对我的后端 API 进行逆向工程并开始调用它来读取客户数据、处理费用等。实际上,Stripe API 通过我的后端公开,因为前端-后端连接是公开的。 (就像 Stripe 教程中的所有后端起始代码一样)。
如何保护客户端与后端的通信?
我的前端是一个公共的静态站点。它没有通过后端进行身份验证。为了防止来自外国的请求,我要求请求的来源属于我的网络域。
问:但如果这是解决方法,则意味着验证来源将是识别请求真正所有者的充分条件。那么为什么 Stripe 不让我们将代码完全移动到客户端呢?
需要 Stripe Secret 密钥的唯一原因是对请求进行身份验证。为什么不直接在 Stripe 仪表板的某处添加允许的来源,而不需要密钥?
Q2:后端代码背后的全部原因是简单地将 Stripe Live 密钥隐藏起来吗?即使可以通过“非安全”端点访问后端?
Q3:我应该采取哪些步骤来获得一个安全的客户端后端集成,以保证我的后端知道该请求确实是由客户端发出的。 (客户端是一个前端应用程序)。
【问题讨论】:
-
1) 检查
Origin标头绝不是验证请求来源的安全方法。它很容易被伪造...... 2)为什么你需要将所有(半敏感的)数据发送到你的前端? -
@derpirscher 我没有向前端发送任何数据。我正在使用命中后端端点的前端,这些端点是公共的。所以基本上整个 Sripe API 都简单地包装在我的后端代码中。可以吗?
-
你说 "...开始调用它来读取客户数据、处理费用..."不要将它从后端返回到前端?只要此敏感数据仅在条带和您的后端之间“传输”,就没有问题。当然,如果你想在前端显示一些关于最近购买的信息或类似的东西,你需要某种形式的身份验证。再次检查
Origin标头根本就不安全 ... -
@derpirscher 前端收集数据并将此数据发送到后端端点。后端包装这些数据,添加一个 API 密钥并点击 Stripe。所以从技术上讲,“密钥”并不是那么秘密,因为任何人都可以收集相同的数据并将其发送到后端。
-
例如,一个人可以通过点击我的后端“create_customer”端点并发送所需的数据负载在我的帐户中创建十亿新客户。
标签: stripe-payments