【发布时间】:2014-04-13 15:35:38
【问题描述】:
确保客户通过 Google Wallet for Digital Goods 进行的购买已经有效支付,客户依赖于out-从 Google 服务器到商家服务器的带外回传。显然,此时谷歌服务器发送的唯一参数是最初发送给客户端的原始 JWT 令牌,带有额外的订单 ID。任何客户都知道此 JWT 令牌。
如何确保此回发来自 Google?
我可能会漏掉一些东西,但是如果商家服务器使用简单的 URL(例如 postback.domain.com),攻击者很容易通过轮询来猜测它,然后使用原始 JWT 令牌发出虚假的付款确认调用,加上一个虚拟订单 ID。对我来说商家服务器无法确保回发是否有效。就安全性而言,使用带有一些嵌入式密钥的回调 URL 似乎是一种糟糕的解决方法。
这很奇怪,因为在回发中包含一个简单的签名应该很容易。例如,基于 JWT 令牌内容的哈希、商家帐户私有共享密钥以及由商家服务器生成的新随机序列,包含在初始 JWT 令牌中。此哈希只能由 Google 和商家计算,并且可以用于检查回发的真实性。
【问题讨论】:
标签: security e-commerce android-pay