将授权令牌从 parent window 发送到 iframe 源,以便 iframe 源可以进行调用

Sending an authorization token from parent window to iframe origin so that iframe origin could make the call

我正在开发一个 SDK,可以为 e-commerce 无权拥有信用卡数据 (cc_data) 的公司(商家)接受在线卡支付。目前我正在努力想出一个合适的解决方案来保护 API.

currents 解决方案 使用无状态会话(不会更改)并且如下:

支付表单初始化

iframe,收集cc_data并提交

问题

现有支付 API 端点也需要提供给商家的令牌,但我还没有找到从商家那里获取令牌的合理解决方案,因为系统是无状态的。在某种程度上,我的解决方案没有遵循标准令牌授权,其中令牌是为用户授权其操作而提供的,因为用户(在我的例子中是商家)没有调用该操作。我只使用我自己的服务器提供的 CSRF 令牌来调用它。

可能的解决方案

在我看来,在某种程度上,也许我应该完全放弃令牌授权的想法,因为这不是它的情况 - 商家没有拨打电话,因此不需要授权(并且在期间付款启动它已经验证了自己)。但一些开发人员确实指出,在我的情况下,CSRF 令牌可能不够安全,因为他们有可能访问它(例如,模仿网络浏览器,令牌被保存的地方)然后他们能够滥用付款 API 令牌有效期间的端点。

考虑到前面提到的情况,我仍在尝试找到一种解决方案,以能够实现 API 安全性的方式传达授权令牌。显而易见的可能解决方案是使用 postMessage() 将令牌从商家 (parent window) 发送到 submit.js(iframe 来源)。但我不太喜欢这个想法,因为有很多可能的来源,令牌可能来自哪里,因此我无法做出合理的过滤器,我从哪里排除消息。将令牌发布到服务器不是一种选择,因为它是无状态的......并且调用 iframe 不提供包含 headers.

的可能性

提出想法

所以目前我正在寻找解决方案,并认为 Whosebug 可能是寻求建议的最佳场所。也许我应该完全改变我目前的概念证明(这意味着我的问题没有好的解决方案),所以也欢迎在这个层面上提出建议。当然,还要考虑到服务器是无状态的,cc_data一定不能到达商户,整个支付表单的设计尽可能在商户的控制下。

提前感谢您的建议。

这是我第一次 post 使用 Whosebug(几周前我作为初级开发人员开始工作),这是一次全新而有趣的体验。

编辑: 业务需要

实际上我第二天就自己解决了这个问题,但我想先在实践中检查我的解决方案。答案其实很简单:double submit cookies.

所以基本上,无论何时使用 submit.js 调用 submit.html(负责将支付数据发送到 API 端点的 iframe 按钮),它都会从 back-end 服务器。服务器也会使用 https 安全 cookie 将加密 cookie 附加到 submit.html。

现在,每当 submit.js 调用 API 端点时,CSRF 令牌将与 header 一起发回。 Back-end 服务器获取附加到 submit.html 的加密 cookie,解密并将其与 header 中的 CRSF 令牌进行比较。如果匹配,则请求有效。

可以在此处找到更多信息:OWASP cheat cheet