我正在编写一个使用第三方API服务的应用程序(比如谷歌地图,细分分析等......)。所有这些应用程序都提供了一个应该嵌入JS代码的API密钥。
所以任何可以检查源的人都知道客户端密钥。这些服务如何防止错误使用该密钥。 假设某人使用我的密钥调用这些API的次数与每日允许的最大API调用限制一样多,这将使进一步的实际API调用失败。
我知道推荐人标题可以用来检查请求来源,但精明的用户很容易欺骗推荐人标题。
我不知道服务是否采取了任何措施。似乎是一个非常重要的问题。
提前致谢。
答案 0 :(得分:0)
这是一种风险,但它并不像API供应商准备好的那样糟糕。
首先要注意的是,这样的API密钥不会用于身份验证,因为它不会对调用者(应用程序和最终用户)进行身份验证。它仅适用于速率限制和跟踪等事项。
因此,真正的威胁与您所描述的类似,例如有人使用您的API密钥并使用您的配额。但是,如果该人通过自己的计算机或网络进行此操作,则可以从其IP或IP范围看到所有恶意流量。如果API提供商很聪明并且具有良好的监控功能(例如Google),他们就不会撤销/停用您的API密钥,而只会过滤或忽略恶意流量。
因此,攻击者应该能够使用您的API密钥建立一个网站并让用户访问它。但是,在这种情况下,referer / origin标头不能被欺骗,浏览器通常不允许Javascript更改请求中的引用者或原始标头。同样,API提供商还可以根据引用/来源过滤恶意流量。
攻击者需要访问许多不同的客户端,例如僵尸网络,以使用您的API密钥发出所有请求以耗尽您的配额。这可能会有效,但如果攻击者可以使用分布式拒绝服务攻击您的网站,那么您的主要关注点可能不是您的API密钥。