使用单独的服务器时,我应该如何保护应用内 Android 支付?

信息安全 应用安全 移动的 客户端 安卓
2021-08-29 13:19:42

我目前正在实施 Android 应用内支付,我想知道应该注意哪些攻击媒介。

我有一个简单的应用程序来查看服务器生成的内容。我想允许用户在应用内购买额外的访问权限,并想知道如何将成功的交易传达给服务器。

快速总结 Android 应用内支付的工作原理:

  • 该应用程序将用户发送到 Android Market 并购买产品
  • 交易完成时,应用程序会收到市场通知。
  • 该应用程序使用 nonce 请求交易信息。
  • Google 会向应用程序发送包含交易记录的响应,重复随机数,并使用开发人员特定的私钥进行签名。
  • 该应用程序可以使用随机数和签名(+ 公钥)检查数据。
  • [更新]:Android 事务总是包含时间戳,我的应用添加了一个 GUID 来识别客户端。(两者都在签署的交易记录中)

更多信息在这里:http: //developer.android.com/guide/market/billing/index.html

我目前的计划是将完整的交易记录发送到服务器,并检查服务器上的公钥。

我有一些问题:

  • 我的计划本身就存在缺陷吗?
  • 是否最好也生成和检查 nonce 服务器端?为什么仍然使用随机数?
  • 与服务器通信时是否有必要(最好)使用 HTTPS?

我不保护私人或绝密数据,但我不想让攻击者容易。

1个回答

我看到的可能缺陷是您在第二个问题中提出的问题。最好仔细检查服务器端的所有内容,并将在客户端上完成的任何操作(即使来自您自己的应用程序)视为不受信任。在这种特殊情况下,我看不到固有问题,但客户端仅在发现缺陷时才检查是否打开了门。

nonce 就像交易中的盐一样,类似于 *nix 系统存储密码的方式。nonce 用于向使用您的密钥加密的值添加熵,从而在很大程度上消除了两个交易被加密并导致相同签名以及其他类似加密攻击的可能性。

作为一个偏执狂,我会说当您谈论货币易手时,有必要使用 HTTPS 进行通信。使用明文传输,是什么阻止我在我的星巴克截取完整的交易记录并将它们作为我自己的交易发送,以及其他令人讨厌的行为?