2009-09-01 94 views
43

我已经为我的域获得Google Maps API密钥。我应该采取哪些措施来保护我的Google Maps API密钥?

,当我得到我的钥匙显示嵌入在请求参数的关键,例如提供的例子:

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=true_or_false&amp;key=my-key" type="text/javascript"></script> 

我明白,在请求引荐字段必须我的域名相匹配,它是安全,使我的钥匙在脚本标签和类似的可见?或者我应该采取其他措施吗?

回答

49

考虑到关键必须包括在HTML页面的<script>标签,加载JS文件/从谷歌的服务器上的数据,有什么可以做:

  • ,你必须把它放在你的HTML文件
  • 每个人都可以看看这些。

不过,它并不重要:如果有人试图在另一个域名上使用此密钥,他们将得到一个Javascript警报 - 这对用户来说并不好。

所以:

  • 没有什么可以做;这是它的工作方式
  • 而且没有太多你应该担心的,我会说。
+3

我认为你可以在你自己的网站上使用代理来获取“真实”文件。完全没有意义,是的,但我认为这是可能的。 – 2009-09-01 22:07:37

+1

想象一下,如果我错过了某些东西,值得检查。欢呼那些回答的人。 – Brabster 2009-09-01 22:26:30

+0

@Tim:不确定;如果想要显示地图的站点的域名,我猜测JS代码本身,它以某种方式与密钥中包含的信息进行比较似乎很正常 - 但我仍然不要尝试。 ;;; @Brabster :-) – 2009-09-01 22:50:21

3

我不明白为什么你会打扰。是不是只从你的域名有效的关键? IIRC,唯一编码的信息是您的域名,除了Google可能添加的任何信息,例如它生成的时间。

7

在Google API控制台上有设置可以保护您的API带宽使用不被其他域/用户使用。您可以通过在API控制台上使用引用来限制和保护该内容。 API密钥会拒绝没有符合您的限制的推荐人的请求。

以下是Google for API Key的屏幕截图,Google只能使用它的两个域名。 enter image description here

10

虽然这个问题已经有几年了,但它是一个非常好的问题。据我所知,暴露API密钥,即使他们是域匹配,仍然可能导致滥用。这里有一篇关于Security Stack Exchange的文章,更详细地介绍了这一点。

,你可以采取以避免潜在的滥用的步骤已公布由谷歌在这里:

的最佳实践指南安全地使用API​​: https://support.google.com/cloud/answer/6310037?hl=en

虽然我会建议服用这一切有一种方法可以处理由Brabster发布的具体示例,并将密钥存储在环境变量中。这样您所需要做的就是将键替换为存储在项目中的服务器端变量。但是,一定不要将存储密钥的文件提交到公共存储库。

+0

你将如何使用原始问题(纯Javascript)的环境变量? – 2017-09-09 18:43:42

+0

由于环境变量是服务器端变量,因此可以使用JavaScript使用node.js进行设置。这里有一个关于这种技术的简短教程:https://hackernoon.com/how-to-use-environment-variables-keep-your-secret-keys-safe-secure-8b1a7877d69c。考虑到原始问题,脚本标记将不得不动态生成,或者在函数中进行请求。 – rjbultitude 2017-09-11 12:03:07

+0

我也觉得这个答案没有解决这个问题。 maps API需要浏览器端JavaScript,任何读取页面的人都可以阅读。 – 2017-11-26 17:48:44

1

您应该使用后端/服务器端来保护和处理密钥。在我的情况下,我使用Django f/w服务器端,它可以服务于ajax调用,从服务器脚本/ db获取密钥,然后将其传递到谷歌API。

相关问题