Nic*_*ick 5 ios receipt-validation
Apple 提供了一个端点来验证收据:https : //buy.itunes.apple.com/verifyReceipt并警告不要从应用程序调用端点
无法直接在用户设备和 App Store 之间建立可信连接,因为您无法控制该连接的任何一端,因此容易受到中间人攻击。
据说,安全的方法是先将收据发送到“我自己的”服务器,然后从自己的服务器与Apple端点通信。
老实说,我不明白它如何帮助提高安全级别。是的,我不控制/verifyReceipt端点,但 Apple 希望能做到。为什么
手机 <-> 我的服务器 <-> 苹果服务器比手机好 <-> 苹果服务器?
您能否从黑客(或中间人)的角度详细说明这一点?在后一种情况下,他将如何篡改收据/回复,而在前一种情况下,是什么让他感到困难?
更改应用程序二进制文件以更改应用程序内的字符串相对容易。如果您的二进制文件包含字符串“ https://buy.itunes.apple.com/verifyReceipt ”,那么攻击者可以将该字符串更改为“ https://example.com/verifyReceipt ”(受他们控制的服务器)并拥有服务器返回收据 JSON,使之看起来购买成功。这是一种易于自动化的攻击,因此您只需通过脚本运行二进制文件,该脚本将 Apple URL 的所有实例替换为另一个 URL。
当您使用自己的服务器与 Apple 通信时,您可以(相对)确定该连接是安全的。还有一些方法可以保护应用程序和服务器之间的通信,例如应用程序二进制文件中的证书和公钥,即服务器上的私钥。(我不是这方面的专家,因此有关密钥的详细信息可能不是 100% 正确的)。
话虽如此,攻击者还可以通过其他方式使其看起来像是购买。他们可以在您的应用程序二进制文件中搜索常见的收据解析库并翻转已知的布尔值(例如userCompletedPurchase布尔标志)。这些攻击很容易编写脚本。
确保您的应用程序不受攻击的最佳方法是删除容易实现的目标,并使常见脚本不会打开您的应用程序进行攻击变得更加困难。一种方法是不直接与 Apple 验证收据。
| 归档时间: |
|
| 查看次数: |
1177 次 |
| 最近记录: |