0

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

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

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

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

该领域的最佳实践是什么?

4

2 回答 2

3

这里有一些建议可以帮助您保持 API 的私密性。

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

但最终,如果有人真的想访问您的 API,他们会——通过对您的客户端代码进行逆向工程,或更复杂的数据拦截技术。您可以期望的最好的结果是阻止普通用户的访问尝试。

于 2013-05-03T16:39:38.010 回答
1
  • 如何防止有人嗅探 API 请求并发出自己的请求(这不应该是公共 API)。

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

  • 如果无法完全阻止#1,那么我如何限制/限制来自未经批准的消费者的请求?这里还有其他问题吗?

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

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

于 2013-10-27T05:03:42.393 回答