我正在后端进行ajax调用,我想知道将charge id
和connected 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);
})
});
答案 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.攻击。