2013-05-03 92 views
0

我有一个将内容提供给移动应用的API,并且目前没有计划将API用于其他产品。我有两个主要问题:针对移动应用安全/身份验证的API

  1. 如何防止某人嗅探API请求并发出他们自己的请求(这不应该是一个公共API)。
  2. 如果不能完全阻止#1,那我该如何限制/限制来自未经批准的消费者的请求?这里还有其他问题吗?

对于每个请求使用auth令牌(作为GET参数传递)满足#2(我可以随时撤销它),但我不想在将来更新应用程序以使用不同的令牌。

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

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

回答

3

以下是一些可以帮助保持API私密性的建议。

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

但最终,如果有人真的想访问您的API,他们将 - 通过逆向工程您的客户端代码或more complex data interception techniques。您希望的最好的方式是阻止普通用户访问企图。

1
  • 如何防止某人嗅探API请求并发出他们自己的请求(这不应该是一个公共API)。

我会回应以前的答案,您应该使用TLS作为理所当然的事情,以加密电线上的流量以防止嗅探。但是我想补充一点,您还需要阻止“捕获 - 重放”攻击,攻击者可能会重新发送他们可能已经获得的以前的消息(例如,从客户端日志中),尽管使用了TLS。在这种情况下,如果您在请求中使用随机数(表示“号码一次”)和/或时间戳,使用HMAC签名,则可以检测并阻止重播的API请求。我在我的博客上写了一个这样的例子:http://www.soatothecloud.com/2011/02/securing-apis.html。例如,亚马逊的API使用这种方法。

  • 如果防止#1是不可能完全,那么如何从未经批准的消费者 极限/油门请求?这里有其他 问题吗?

以及HMAC签名(上面),也可以考虑监测呼入的IP地址范围,设备信息(表示装置类型例如头 - 的Android VS iOS的等),以及其它因素可用于将多个请求链接到特定客户端,然后在API级别应用策略。

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