为了账号安全,请及时绑定邮箱和手机立即绑定

Google Maps如何保护其API密钥?如何做类似的事情?

Google Maps如何保护其API密钥?如何做类似的事情?

API
一只名叫tom的猫 2019-11-07 13:11:43
当前,Google要求您创建一个API密钥,该API密钥特定于将要从中提供地图的域。Google如何执行?我想做同样的事情。我公开了用于我的服务的API,但希望允许客户端通过javascript而不是仅从服务器嵌入对API的调用。我可以用一个随机令牌来保护它,但是任何在客户端计算机上查看代码的人都可以轻易地欺骗它。我一直都认为这个概念是不可能的,但是Google会以某种方式很好地执行它。编辑-听起来Google确实还没有做任何令人惊奇的事情。他们的API最有可能只是用于跟踪,而不能真正保证拥有钥匙的人使用他们的API。
查看完整描述

3 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

我很确定他们使用REFERER URL来确定呼叫的来源。如果该域与分配给密钥的域不匹配,则该请求无效。

对于一个实际的示例,使用PHP可以检查域,$_SERVER['HTTP_REFERER']以检查引荐来源。如果域匹配,则返回有效响应。如果不是,您可以返回401未经授权或其他响应。


查看完整回答
反对 回复 2019-11-07
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

API密钥本身很可能是与该密钥相关联的域的单向哈希,并且只有Google API服务器知道。它可能包含其他一些众所周知的信息(当然对Google而言)。当您从该域发出请求时,API服务器会使用该请求来自的域,并以相同的一种方式进行哈希计算并比较这两个值。

对于Ajax调用,他们很可能使用引荐来源网址获取文档宿主的域。尽管可以欺骗引荐来源网址,但最终还是要使用API,您需要获取Google javascript才能在文档中执行。此时,此javascript可以验证调用Ajax API调用的文档确实源自目标服务器。当然,如果您有自己的DOM实现或脚本的即时修改,这也是欺骗的。但是,这种欺骗需要在客户端进行,并且想要使用Google API的网站能够欺骗客户端软件的可能性很小。

请注意,由于该API本质上是免费的,因此他们也可以提供对其API的匿名访问。显然,Google的意图不是保护未经授权的访问,而是要确保他们可以收集有关该数据使用情况的尽可能多的数据,并能够将该使用情况与他们收集的有关目标域的其他数据相关联。因此,我不希望API密钥验证比我上面描述的复杂得多-更高级方法的ROI太低。

当然,也存在通过其API可能进行XSS攻击的担忧。但是我不认为他们的API密钥与他们拥有的任何反XSS代码有太多联系。


查看完整回答
反对 回复 2019-11-07
  • 3 回答
  • 0 关注
  • 580 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信