我应该采取什么步骤来保护我的Google Maps API密钥?


94

我已经为我的域获取了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>

我了解请求中的引荐来源网址字段必须与我的域匹配,在脚本标记等中使我的密钥可见是否安全?还是我应该采取其他步骤?

Answers:


90

考虑到密钥必须包含在<script>HTML页面的标签中,才能从Google的服务器加载JS文件/数据,您无能为力:

  • 您必须将其放入HTML文件中
  • 每个人都可以看看这些。

不过,这并不重要:如果有人尝试在您以外的其他域上使用此密钥,他们将收到Javascript警报-这对其他用户而言并不好。

因此:

  • 你无能为力; 这是它的工作方式
  • 我会说,您不必担心太多。

5
我认为您可以在自己的站点上使用代理,该代理使用密钥来获取“真实”文件。完全没有意义,是的,但是我认为这是可能的。
Tim Sylvester,2009年

1
认为这是值得检查的情况,以防我错过了一些东西。为回答的人欢呼。
brabster

@蒂姆:不确定; 我猜想JS代码本身是否在打扰显示地图的站点的域名,并且以某种方式将其与密钥中包含的信息进行比较似乎是正常的,但是我还是不尝试。;;; @Brabster::-)
Pascal MARTIN

2
例如,要保护API密钥的带宽使用情况就很重要。检查我的解决方案。
Ifan Iqbal

3
如果我将api密钥用于自己的APP(Windows / ios / android),该怎么办?我可以模拟引荐来源网址并将其用于我自己的目的,而无需您承担任何费用!
loki

21

Google API控制台上有一项设置可以保护您的API带宽用法,防止其他域/用户使用。您可以通过在API控制台上使用引荐来源网址来限制和保护它。如果没有引荐来源匹配您的限制,API密钥将拒绝请求。

这是来自Google的API密钥屏幕截图,只能由Google frowm的两个域使用。 在此处输入图片说明


3
那移动用户呢?
穆罕默德·乌默尔

要增加一点,细节可以在这里developers.google.com/maps/...
SIslam

14

尽管这个问题已有几年历史了,但这是一个很好的问题。据我了解,暴露API密钥,即使它们与域匹配也可能导致滥用。这里有一个关于Security Stack Exchange的帖子,其中对此进行了更详细的介绍。

Google已在此处发布了可避免潜在滥用的步骤:

安全使用API​​的最佳做法指南: https //support.google.com/cloud/answer/6310037?hl = zh-CN

尽管我建议将所有内容都考虑在内,但是有一种方法可以处理Brabster发布的特定示例,并将密钥存储在环境变量中。这样,您所需要做的就是用密钥代替存储在项目中的服务器端变量。但是,请确保不要将存储密钥的文件提交到公共存储库。


16
我也觉得这个答案不能解决问题。maps API需要浏览器端的javascript,任何获取页面的人都可以阅读。
大卫

-1

您应该使用后端/服务器端来保护和处理密钥。在我的情况下,我使用了Django f / w服务器端,该端可以提供ajax调用,以从服务器脚本/数据库获取密钥,然后将其传递给google api。


4
如果您的API密钥曾经到达浏览器,则可以由第三方检索。
松散的驼鹿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.