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代码相关联.
Tre*_*vor 29
我很确定他们使用REFERER URL来确定来电的来源.如果域与分配给密钥的域不匹配,则它是无效请求.
对于一个实际的例子,使用PHP可以检查域$_SERVER['HTTP_REFERER']以检查引用.如果域匹配,则返回有效响应.如果没有,您可以返回401 Unauthorized或其他响应.