我正在开发一个SDK,它允许为没有权利拥有信用卡数据(cc_data)的电子商务公司(商家)接受在线信用卡支付。目前,我正努力想出一个合适的解决方案来保护API。
当前解决方案使用无状态会话(不会更改),如下所示:
付款形式初始化
Iframes,收集cc_data并提交
问题
现有的支付API端点也需要给予商家的令牌,但我没有找到从商家那里获得它的合理解决方案,因为系统是无状态的。在某种程度上,我的解决方案没有遵循标准的令牌授权,因为用户(在我的例子中是商人)没有调用该操作,因此将令牌提供给用户来授权其操作。我只使用我自己的服务器提供的CSRF令牌来调用它。
可能的解决方案
在某种程度上,在我看来,也许我应该放弃象征性授权的想法,因为这不是它的情况-商人没有打电话,因此不需要授权(在付款过程中它已经验证了自己的身份)。但一些开发人员确实指出,在我的情况下,CSRF令牌可能不够安全,因为他们有可能访问它(例如,模仿web浏览器保存令牌),然后他们能够在令牌有效的时候滥用支付API端点。
考虑到前面提到的情况,我仍然试图找到一种解决方案,以便以一种能够启用API安全性的方式来通信授权令牌。显然,可能的解决方案是使用postMessage()将令牌从商人(父窗口)发送到submit.js (iframe原产地)。但是我不太喜欢这个想法,因为有很多可能的起源,标记可以从那里来,因此我不能做一个合理的过滤器,在那里我排除了信息的来源。向服务器发送令牌不是一种选择,因为它是无状态的.并调用iframes不提供包含标头的可能性。
建议想法
因此,目前我正在寻找解决方案,并认为堆栈溢出可能是最好的地方征求意见。也许我应该完全改变我目前的概念证明(这意味着我的问题没有很好的解决方案),所以在这个层面上的建议也是值得欢迎的。当然,重要的是要考虑到服务器是无状态的,cc_data不能到达商家,而且整个支付表单的设计应该尽可能地受商家的控制。
谢谢你提前给我建议。
这是我第一次在Stackoverflow上发表文章(几周前我还是个初级开发人员),也是一个新的有趣的体验。
编辑:业务需要
发布于 2020-12-01 08:05:33
实际上,第二天我自己解决了这个问题,但我想先在实践中检查我的解决方案。答案其实很简单:,double submit cookies,。
因此,只要使用submit.html (如果是submit.js按钮,负责向API端点发送支付数据)调用submit.js,它就会从后端服务器获得一个CRSF令牌。服务器还将使用https安全cookie将加密的cookie附加到submit.html。
现在,每当submit.js调用API端点时,CSRF令牌将被发送回标头。后端服务器获取它附加到submit.html的加密cookie,对其进行解密,并将其与标头中的CRSF令牌进行比较。如果有匹配,则请求有效。
更多信息可以在这里找到:OWASP作弊。
https://stackoverflow.com/questions/64591656
复制相似问题