3 回答
TA贡献1794条经验 获得超8个赞
我很确定他们使用REFERER URL来确定呼叫的来源。如果该域与分配给密钥的域不匹配,则该请求无效。
对于一个实际的示例,使用PHP可以检查域,$_SERVER['HTTP_REFERER']
以检查引荐来源。如果域匹配,则返回有效响应。如果不是,您可以返回401未经授权或其他响应。
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代码有太多联系。
- 3 回答
- 0 关注
- 631 浏览
添加回答
举报