【问题标题】:How do I securely use Google API Keys如何安全地使用 Google API 密钥
【发布时间】:2017-01-30 05:41:42
【问题描述】:

所以我在我正在做的第一个项目中使用 Google Maps API...所以是的,我是新手,如果这是基本的或显而易见的,我很抱歉,但我无法找到明确的答案或方向。以下是我从 Google 找到的关于安全使用 API 密钥的文档。


安全使用 API 密钥的最佳实践

当您在应用程序中使用 API 密钥时,请注意确保它们的安全。公开暴露您的凭据可能会导致您的帐户遭到入侵,这可能会导致您的帐户产生意外费用。为确保您的 API 密钥安全,请遵循以下最佳做法:

不要将 API 密钥直接嵌入代码中:嵌入代码中的 API 密钥可能会意外暴露给公众,例如,如果您忘记从共享的代码中删除密钥。与其将 API 密钥嵌入到应用程序中,不如将它们存储在环境变量或应用程序源代码树之外的文件中。 不要将 API 密钥存储在应用程序源代码树内的文件中:如果您将 API 密钥存储在文件中,请将文件保存在应用程序源代码树之外,以帮助确保您的密钥不会最终出现在源代码控制系统中。如果您使用 GitHub 等公共源代码管理系统,这一点尤其重要。 限制您的 API 密钥仅由需要它们的 IP 地址、引荐来源网址和移动应用程序使用:通过限制可以使用每个密钥的 IP 地址、引荐来源网址和移动应用程序,您可以减少受损 API 的影响钥匙。您可以通过打开“凭据”页面然后使用所需设置创建新的 API 密钥或编辑 API 密钥的设置来指定可以从控制台使用每个密钥的主机和应用程序。 删除不需要的 API 密钥:为了最大限度地减少您受到攻击的风险,请删除您不再需要的任何 API 密钥。 定期重新生成 API 密钥:您可以从 Cloud Platform Console Credentials 页面通过单击每个密钥的重新生成密钥来重新生成 API 密钥。然后,更新您的应用程序以使用新生成的密钥。在您生成替换密钥后,您的旧密钥将继续工作 24 小时。 在公开发布之前检查您的代码:在公开发布您的代码之前,请确保您的代码不包含 API 密钥或任何其他私人信息。


现在我的问题是,如果不直接将其放入代码中,我无法弄清楚如何将 Google 地图合并到我的网站上。现在我的 API 在我的 index.html 中,如下所示:

<script async defer
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">
</script>

但这又是直接在我的代码中,让世界看到我认为是错误的方式。

【问题讨论】:

标签: html google-maps google-maps-api-3 api-key


【解决方案1】:

对于 Google Maps Javascript API v3,密钥必须在您的页面上公开。 适用的文字是:

将您的 API 密钥限制为仅由 IP 地址、引荐网址需要它们的移动应用程序

使用

转到 Google API 控制台并生成一个密钥,将其限制为您拥有(或想要放置地图)的 URL,以防止配额“被盗”。

【讨论】:

  • 将其限制为 URL 并不安全,因为 http 引荐来源网址很容易被欺骗
  • @Danny Ocean,如果将其限制为 URL 不安全(因为 http 引荐来源网址可能被欺骗,或者有人可以在他们的盒子上运行您的 api-key,主机文件将您的 url 指向他们的本地主机服务器),那么对于保护诸如 Javascript Google Maps API 之类的 Google API 密钥,将 api 密钥公开给客户端/最终用户(而不是隐藏的服务器端 api 密钥)的最佳方法是什么?我认为我没有看到其他方法来限制 Google Dev Console 中的密钥(通过 IP,但这不适用于客户端 api-keys,因为最终用户对公共网站有不同的 ips)。
  • @armyofda12mnkeys 当我研究这个主题时,唯一安全的方法(通过安全我的意思是不可能窃取 API 密钥)将是反向代理。不幸的是,当使用 google JS SDK 时,它不会真正起作用。您将能够在不暴露 API 密钥的情况下获取 SDK,但是一旦在客户端上下载了 SDK,它将使用您的 API 密钥发出请求,这可以通过浏览器开发人员工具轻松观察到。但是,如果您将使用 REST API 而不是 SDK,则可以代理这些请求而无需公开 API 密钥。不过,不确定谷歌是否提供了相应的 REST API。
【解决方案2】:

您提到的API key best practices article 仅提供了使用 API 密钥的一般指南,并且对于某些面向最终用户的 API,例如 Google Maps JavaScript API,您无法避免将 API 密钥暴露给最终用户。

因此,强烈建议在公共 Maps JavaScript API 应用中为生产系统中使用的任何密钥(尤其是面向公众的密钥)添加引荐来源网址限制,并且仅授权您的应用的域、主机甚至完整文件 URL。

当您在 Google API Console 中创建您的密钥并为 Maps JavaScript API 选择设置凭据时,该向导将指导您如何保护该密钥,并提示您输入您希望授权的 URL。

【讨论】:

  • 你会使用第二个密钥然后进行本地主机测试吗?既然您不想在生产密钥上启用来自 localhost 的请求?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 2020-08-04
  • 2015-04-01
  • 2015-12-22
  • 2020-01-28
  • 2021-12-02
相关资源
最近更新 更多