【发布时间】:2020-12-12 11:16:40
【问题描述】:
我正在尝试构建一个电子商务应用程序,卖家可以在其中发布他们的商品并将其出售给我平台上的买家。移动应用是使用 Flutter 构建的,我使用 Firebase Firestore 和 Storage 来处理数据,并选择 Stripe 作为我的支付处理选择。
我在 Medium (https://medium.com/flutter-community/build-a-marketplace-in-your-flutter-app-and-accept-payments-using-stripe-and-firebase-72f3f7228625) 上看到了这个指南,它在让我涉足在线支付处理方面做得很好。
但是,他在其中提到的一件事可能看起来不是一种安全的付款方式?
他在指南中所做的是在客户端应用程序中他发出了一个 https POST 请求
final http.Response response = await http.post(‘$urlamount=$amount¤cy=GBP&paym=${paymentMethod.id}’);
然后在他使用的云函数中:
exports.StripePI = functions.https.onRequest(async (req, res) => {
const stripeVendorAccount = 'acct_someAccountIdHere';
stripe.paymentMethods.create(
{
payment_method: req.query.paym,
}, {
stripeAccount: stripeVendorAccount
},
function(err, clonedPaymentMethod){
if(err != null) {
console.log(err);
} else {
stripe.paymentIntents.create(
{
**amount = req.query.amount**, // Security concern??
currency = req.query.currency,
...etc
}
)
}
}
);
必须从客户端传递总金额似乎不是一个好的安全做法?我可以想象也许有足够知识的人可以对应用程序进行逆向工程并编辑该数量变量?
那么设置金额的正确方法是什么?
我已经看过并阅读了来自 Google 的 firebase 团队的视频和帖子的所有官方指南,然而,就数量而言,它只是:
const amount = snap.data().amount;
我曾考虑使用云函数以某种方式将所有商品的价格和数量相加/相加以生成金额,但是,这真的是解决此问题的最有效方法吗?如果有 N 多个卖家从买家那里订购了 M 件商品,会不会导致 Cloud Functions 进行大量不必要的计算?
我是移动和在线支付的新手,所以首先感谢您的耐心等待。
【问题讨论】:
-
好吧,您仍然需要以某种方式从客户端获取这些数据。使用 SSL 或其他加密连接应该会更安全。
标签: firebase security google-cloud-functions stripe-payments