适用于移动应用安全/身份验证的API

时间:2013-05-03 15:40:55

标签: api security mobile oauth

我有一个为移动应用提供内容的API,目前没有计划将API用于其他产品。我有两个主要问题:

  1. 如何阻止某人嗅探API请求并发出自己的请求(这不应该是公共API)。
  2. 如果完全无法阻止#1,那么如何限制/限制来自未经批准的消费者的请求?还有其他问题吗?
  3. 为每个请求使用auth令牌(作为A GET参数传递)满足#2(我可以随时撤销它)但是我不想在将来更新应用程序以使用其他令牌。

    此外,移动应用程序中的用户没有身份验证,API也是用PHP编写的。

    这方面的最佳做法是什么?

2 个答案:

答案 0 :(得分:3)

以下是一些有助于保持API隐私的建议。

  • 使用TLS阻止随意数据包嗅探。
  • 确保您的客户端验证服务器证书以防止MITM攻击。
  • 在客户端代码中加密或混淆auth令牌,因此它不会像字符串转储那样明显暴露。

但最终,如果有人真的想要访问您的API,他们会通过反向设计您的客户端代码或more complex data interception techniques。您可以期望的最好的做法是阻止普通用户进行访问尝试。

答案 1 :(得分:1)

  • 如何阻止某人嗅探API请求并发出自己的请求(这不应该是公共API)。

我会回应之前的答案,你应该使用TLS作为理所当然的事情,以便加密线路上的流量以防止嗅探。但我要补充的是,您还需要阻止“捕获 - 重放”攻击,即使使用TLS,攻击者也可以重新发送他们可能已获得的先前消息(例如,从客户端日志)。在这种情况下,如果您在请求中使用nonce(意思是“一次编号”)和/或时间戳,并使用HMAC签名,则可以检测并阻止重放的API请求。我在我的博客上写过一个关于这个例子的文章:http://www.soatothecloud.com/2011/02/securing-apis.html。例如,亚马逊的API使用这种方法。

  • 如果完全无法阻止#1,那我该怎么办? 来自未经批准的消费者的限制/限制请求?还有其他吗? 关注点?

除了HMAC签名(上图),您还可以考虑监控传入的IP地址范围,设备信息(例如表示设备类型的标题 - Android与iOS等)以及可用于链接多个请求的其他因素到特定客户端,然后在API级别应用策略。

完全披露我为API管理/ API网关供应商(Axway)工作,但上述信息应该是通用的。