【发布时间】:2011-12-19 09:20:07
【问题描述】:
如果我将验证卸载到远程服务器,我认为该过程将类似于:
Android Market Application Remote Server
|--------IN_APP_NOTIFY------->| |
| |-----nonce----->|
| |<----nonce------|
|<-GET_PURCHASE_STATE_CHANGED-| |
|---PURCHASE_STATE_CHANGED--->| |
| |--verification->|
| |<-verification--|
如果我理解正确的话,nonce 是为了减少重放攻击漏洞,而验证是为了减少欺骗漏洞。此外,文档建议卸载安全处理的原因是验证步骤需要访问我的公共 Android Market 发布者的密钥,而远程服务器的目标是防止所述密钥需要包含/计算在我的代码中。
第一个问题,远程服务器进行随机数生成/检查是否有安全原因?按下验证步骤正确完成,我们会从远程服务器上查明消息是否被欺骗。所以在我看来,nonce 只是用来检测有人转播 IN_APP_NOTIFY。
第二个问题,如果我们的公钥是文字字符串,为什么重要?文档说,“你不想让黑客或恶意用户很容易用另一个密钥替换公钥。”我不清楚有人如何利用我的应用程序,即使他们可以编辑二进制文件以包含恶意公钥,而无需退出应用程序。
第三个问题,我在尝试从远程服务器验证验证时会不会遇到所有这些相同的问题(例如,将公钥存储到应用程序中的远程服务器)?
第四个问题,如果我想在手机上存储此购买验证的结果(即,我不想在用户访问时验证解锁内容的购买状态),那么所有这些额外的安全性都是无效的内容)?
【问题讨论】:
-
嗨,我在开始应用内结算后遇到了所有相同的问题。我认为您提出的图表是正确的(据我现在了解)。自 12 月以来,您是否获得了任何其他见解?
标签: android security in-app-purchase