将Stripe收费ID和关联帐户的帐户ID暴露给客户端是否安全?

时间:2018-09-22 03:36:48

标签: javascript node.js ajax stripe-payments

我正在后端进行ajax调用,我想知道将charge idconnected account id暴露给客户端是否安全?

没有在浏览器端没有任何秘密密钥或任何东西。

谢谢!

点击退款按钮后,我称之为:

$.ajax({
            type: "POST",
            data: {amount: pennies.toFixed(0), charge: chargeId, account: accountId},
            url: "/refund",
            success: function(data){
          //f.e. set to modal
          $('#refund_dialog').modal('hide')
            $('#refund_dialog').on('hidden.bs.modal', function () {
                    alert(JSON.stringify(data));
                  })

        },
        error: function(err) {
            $('#refund_dialog').modal('hide')

            $('#refund_dialog').on('hidden.bs.modal', function () {
                    alert(err.responseText);
                  })
    });

3 个答案:

答案 0 :(得分:0)

很安全,没有API密钥,这些ID就没有用。

答案 1 :(得分:0)

这很安全,但是为什么需要这么做?

答案 2 :(得分:0)

这不是 安全。

如果黑客决定创建一个程序,通过输入随机帐户ID,收费ID和退款ID来发出数百万个退款请求,将会发生什么情况?

结果可能是要求退款数千...

相反,您应该将所有这些数据(帐户ID,费用ID和退款ID)存储到正在处理事务(或转发事务)的服务器上的数据库中的表中。

应使用通过使用某些UUID生成器(例如OpenSSL)生成的密钥来存储这三个数据,以确保不会生成冲突的ID。

UUIUD应该是数据库中数据的密钥。

退款按钮应该只通过AJAX发送相同的UUID,这时服务器将使用UUID查找必要的数据,然后通过Stripe发送相关数据。


其不安全的另一个原因

通过将帐户ID返回给用户,如果他们的网络浏览器受到恶意扩展/附加组件/插件/等的破坏,那么现在黑客可以掌握用户的帐户ID,从而为他们提供他们可以用来伪造其他请求等的重要信息。

永远不要假设发送给客户端的数据将被可靠地接收或返回。

仅当要将数据显示给客户端时(例如,上面有其帐户ID的页面),才应将数据发送给客户端。

与此同时,发送给客户端的数据绝不能用作任何服务器端操作的输入,因为这样可以伪造请求,这可能使黑客访问您的后端系统。

另一种不安全的方法

如果黑客熟悉您的后端系统(Stripe或其他工具),那么他们可以通过将网络请求转发到服务器来确定您的API密钥是否能够对服务器执行“中间人”攻击。以及从远程位置。这可能允许您站点的另一部分完全不与任何Stripe交互连接,成为网关,使他们可以发送特制请求(具有随机帐户ID,费用ID,金额),然后在加密后查看数据使用您的API密钥,并能够对该数据进行解码,以获取您的秘密API密钥。

相反,通过使用UUID,黑客无法将难题的两部分连接在一起,从而使其免受M.I.T.M.攻击。