通常,我会说是的,api 密钥应该保密,谷歌的 api 控制台甚至这么说。但是,我只是打了一个 ajax get 调用,所有信息都清楚地显示在我的页面上,以便构建该查询,包括我的 api 密钥和 cx(自定义搜索引擎 ID)。据推测,其他人可以使用我的凭据来查询我的每日限额。
Google 确实允许您指定允许按域使用您的 cse 的推荐人白名单。这是否在一定程度上缓解了这个问题?如果他们只是使用 HTTP_REFERRER,那可以伪造吗?
有什么想法吗?
通常,我会说是的,api 密钥应该保密,谷歌的 api 控制台甚至这么说。但是,我只是打了一个 ajax get 调用,所有信息都清楚地显示在我的页面上,以便构建该查询,包括我的 api 密钥和 cx(自定义搜索引擎 ID)。据推测,其他人可以使用我的凭据来查询我的每日限额。
Google 确实允许您指定允许按域使用您的 cse 的推荐人白名单。这是否在一定程度上缓解了这个问题?如果他们只是使用 HTTP_REFERRER,那可以伪造吗?
有什么想法吗?
Google 使用 API 密钥来识别发送这些请求的人。谷歌将实施配额。正如您正确识别的那样,如果 Google 收到太多使用该 API 密钥的请求,他们会将 API 密钥列入黑名单。如果发生这种情况,您自己的网站/应用程序将停止工作。
因此,将 API 密钥保留在您的页面上是有风险的。这些风险有点小:获得 API 密钥的人不会在您的系统上获得 root 权限,但他们最终可能会导致您的应用程序停止工作。
如果此风险困扰您,请不要将 API 密钥放在您的网页上。相反,让客户端向您的服务器发出 AJAX 请求,然后让服务器向 Google 发出请求并将结果返回给客户端。这样,Google API 密钥就不会暴露给客户端。
Referer 标头检查可防止其他人复制您的 API 密钥并将其放入自己的网页中并使用 Javascript 查询 Google。但是,它不会阻止他们复制您的 API 密钥并在他们从自己的计算机发起的请求中使用它。(如果他们在自己的机器上使用 curl 或其他类似的库,他们可以伪造 Referer 头并使其说出他们想要的任何内容。因此,Referer 检查无助于防止这种情况。它只会阻止其他人嵌入 API 密钥在他们的网页中,并在访问他们网页的人的浏览器中运行的 Javascript 中使用它。)