Google地图如何保护其API密钥?如何制作类似的东西?

Vyr*_*tek 74 security api google-maps web-services api-key

目前,Google要求您创建一个特定于将从中提供地图的域的API密钥.Google如何执行此操作?我想做同样的事情.

我为我的服务公开了一个API,但希望允许客户端通过javascript而不是从服务器嵌入对API的调用.我可以用一个随机令牌来保护它,当然,任何看客户端机器上的代码的人都很容易欺骗它.

我总是理解这个概念是不可能的,但不知何故谷歌在执行它方面做得很好.

编辑 - 听起来谷歌毕竟没有做过任何惊人的事情.他们的API最有可能仅用于跟踪,而不是真正保证他们的API由具有密钥的人使用.

Fra*_*nov 65

API密钥本身很可能是与密钥相关联的域的单向散列,以及只有Google API服务器知道的秘密.它可能包含其他一些众所周知的(当然是谷歌)信息.当您从该域发出请求时,API服务器将获取请求来自的域并进行相同的单向散列计算并比较这两个值.

对于Ajax调用,他们很可能使用referrer来获取文档主机的域.虽然推荐人可能会被欺骗,但最终为了使用API​​,您需要让Google javascript在文档中执行.此时,此javascript可以验证调用Ajax API调用的文档确实来自目标服务器.当然,如果您拥有自己的DOM实现或对脚本进行即时修改,这也是可欺骗的.但是,这种欺骗需要在客户端进行,并且想要使用Google API的网站能够欺骗客户端软件的可能性非常小.

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

当然,还有人担心可能通过他们的API进行XSS攻击.但我不相信他们的API密钥与他们拥有的任何反XSS代码相关联.

  • "他们可以提供匿名访问" - 请注意,某些功能受到每天请求数量和API密钥的限制(并且已经发布),例如反向地理位置. (2认同)

Tre*_*vor 29

我很确定他们使用REFERER URL来确定来电的来源.如果域与分配给密钥的域不匹配,则它是无效请求.

对于一个实际的例子,使用PHP可以检查域$_SERVER['HTTP_REFERER']以检查引用.如果域匹配,则返回有效响应.如果没有,您可以返回401 Unauthorized或其他响应.

  • Ajax调用的API地址是客户端的用户代理的IP地址,它解析文档并执行javascript.因此,Ajax请求的IP地址与文档发起域无关.请求中与文档域相关的唯一信息是引用者.当然,引用者可能是欺骗者.但是,对于Google API,它将是想要欺骗引荐来源的网站; 但是,实际的欺骗只能在浏览器的客户端进行.因此,欺骗并不是一个很大的威胁. (26认同)
  • 许多"流行的安全解决方案"默认剥离或替换引用者.这些用户是否被阻止看到该服务? (5认同)
  • 不.这是可欺骗的.我认为谷歌更可能依赖于IP地址(不能轻易欺骗)和DNS查询. (2认同)
  • 滥用者可以欺骗API密钥并使用修改后的引用来从其Web浏览器窃取公司的配额.它仅限于Web浏览器(客户端).您是否认为Google在某些方面限制了已识别客户端(唯一IP地址)在给定时间范围内可以提出的请求数量?这可能会限制配额盗窃的影响. (2认同)