javascript - Paypal 快速结帐。在 onAuthorize 函数中将数据存储在 DB 中是否安全?

标签 javascript security paypal payment express-checkout

我在网站的支付流程中遇到了一个很大的安全问题。

我有一个 nodejs 服务器和一个带有 .js 的标准 html 页面,它使用 Paypal Express 结账。

鉴于我的网络应用程序的性质,我的服务器必须保存到期付款的数据。 关键是,即使使用客户端-服务器架构进行支付,数据流也是通过客户端浏览器进行的。

问题是Paypal Express结账使用新窗口执行支付,所以数据必须通过客户端! (也可能不会,等帖子结束)

这是我的客户端代码:

paypal.Button.render({

        env : 'sandbox',
        commit: true, 
        style: {
            size: 'medium',
            color: 'gold',
            shape: 'pill',
            label: 'checkout'
        },
        locale: 'en_US',
        payment: function() {
            nickname = $("#nickname").val();
            amount = $("#amount").val();
            description = $("#description").val();
            data = {
                "nickname" : nickname,
                "amount" : amount,
                "description" : description
            };
            return new paypal.Promise(function(resolve, reject) {
                jQuery.post("/newPayment", data).done(function(data){
                    console.log("HEI I GOT THE PAYMENT JSON = " + data);
                    parsed_data = JSON.parse(data);
                    resolve(parsed_data['id']);
                });
            });
        },

        onAuthorize: function(data, actions) {
            // HERE IS WHERE I SHOULD CALL MY SERVER TO INSERT DATA INTO DB
            console.log("PAYMENT SUCCESSFUL");
            return actions.payment.execute();
        },
        onError: function(data, actions){
            console.log("ERRORRRRRR");
            $("#warning").show();
        }

    }, '#paypal-button');

如果您查看我的评论行,就会发现 BIIIG 问题。 稍微熟练的人都可以复制粘贴此 .js 并向我的服务器确认虚假付款,这会将虚假数据插入数据库。

我认为解决此问题的唯一方法是首先(当用户单击“付款”按钮时)在数据库中创建一个“待处理”付款,然后在获得授权后使用数据调用我的服务器并检查 2 付款是否是一样的。

但是这个解决方案还有另一个问题,没有什么可以确保我的服务器实际执行支付,攻击者可以执行第一次 POST 到我的服务器来创建支付,然后(即使在恢复“ID”的相同功能中parsed_data['id']) 使用正确的 ID 执行第二个 POST;他可以在不通过 paypal 窗口的情况下完成所有这些操作。

我的问题是:有没有办法从我的服务器恢复与我的 Paypal 帐户相关的付款?

或者,我是否遗漏了 PaypalSDK 中的某些内容?有没有办法让 PAYPAL 在执行付款时调用我的服务器?

最佳答案

你是对的,客户端没有是安全的。您应该让您的服务器验证付款是否成功(以及正确的金额等)。PayPal 具有用于服务器的 REST API 和用于特定语言的 SDK。

关于javascript - Paypal 快速结帐。在 onAuthorize 函数中将数据存储在 DB 中是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47799594/

相关文章:

javascript - 如何在 jQuery Mobile 中将导航栏用作选项卡

javascript - 将带有图形/文本的图像调整/缩放到 100% 宽度/高度

javascript - 如何在不删除子表内容的情况下删除父表?

javascript - 两个集合mongodb之间的关系

php - LIBSODIUM 像使用 AES_DECRYPT 一样解密 mysql 查询中的数据

php - PayPal IPN HTTP 错误 400 - PHP - 使用 PayPal GIT 代码

c# - Medium Trust 允许哪些反射权限?

java - 在 Java 中调用安全的 Web 服务

PayPal Express Checkout - 根据位置添加邮资选项

Paypal 错误 580029 缺少订阅所需的参数之一