Answers:
您不能有效地拒绝连接,除非为每个客户提供一个可以单独撤消的私钥。但这可能太过分了。如果大多数人不愿意发射子弹,则不需要防弹解决方案。
这是一个安全性问题,因此让我们描述一个威胁模型和缓解策略。
假设您命中了一个URL,这会给您带来可观的成本(例如,处理成本),并且您想保护它免受简单的DoS攻击和仿冒应用程序的攻击。
使用SSL隐藏连接以免被轻易分析。在执行请求中昂贵的部分之前,请使用一个不完整的端口号,一个重定向序列,一个cookie交换来使连接复杂化。使用应用程序中附带的一些秘密代码让服务器知道它必须接受连接。
现在,仅通过运行数据包嗅探器或查看代码中类似URL的字符串,某人就无法学习代价高昂的URL。潜在的攻击者必须反编译您的应用程序。
您不能真正保护代码不被反编译和/或在调试器下运行。攻击者最终了解了密钥和连接顺序。
您会注意到,您开始以昂贵的URL接收到大量请求:以攻击的形式,或者以必须访问您的服务才能运行的模仿应用程序的形式,或者可能是公开发布了漏洞利用代码。但是,您不能从合法请求中分辨出恶意请求。
使用其他密钥为您的应用创建免费的次要更新。它应该访问另一个昂贵的URL,该URL提供与受损的昂贵URL相同的数据。在一段时间内,使两个URL都可访问。
观看您的用户群切换到更新版本。限制受损的昂贵URL,并最终对其进行404处理。您刚刚缓解了安全漏洞,希望不会损失太多。回到原点。
免责声明:我不是安全专家。
您有一个经典的问题,实际上是无法解决的。
为确保简单的隐私(即确保您的数据在传输过程中不会被窥探或更改),您可以通过SSL进行所有操作,并通过iPhone认可的CA为服务器提供正确颁发的证书。
但是,对于授权而言,没有一个好的解决方案可以100%保证除您的应用之外的任何人都不能访问该API。您建议的解决方案将起作用,但以下情况除外:
这是不可能的。这并不是说您不能采用这种方法,而是要了解它并非万无一失。正是这个问题使DRM完全无效。