如何安全地使用Google API密钥

Jac*_*k O 58 html google-maps api-key google-maps-api-3

所以我在我正在做的第一个项目中使用谷歌地图API ...所以是的我是新的,如果这是基本的或明显的我很抱歉,但我无法找到明确的答案或方向.以下是我在Google上发现的有关安全使用API​​密钥的文档.


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

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

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


现在我的问题是我无法弄清楚如何在我的网站上加入谷歌地图而不直接把它放在代码中.现在我的API在我的index.html中是这样的:

<script async defer
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">
</script>
Run Code Online (Sandbox Code Playgroud)

但这又是我的代码直接在世界上看到我认为是错误的方式.

geo*_*zip 61

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

限制您的API密钥仅供 IP地址,引荐来源网址需要它们的移动应用使用

转到Google API控制台并生成密钥,将其限制为您拥有(或想要放置地图)的网址,以防止配额"被盗".

  • 将其限制为URL并不安全,因为http referrer很容易被欺骗 (14认同)
  • @Danny Ocean,如果将其限制为 URL 并不安全(因为 http 引荐来源网址可能会被欺骗,或者有人可以在他们的机器上运行您的 api 密钥,并使用主机文件将您的 url 指向他们的本地主机服务器),那么最安全的方法是Google API 密钥(例如 Javascript Google Maps API)将 api 密钥公开给客户端/最终用户(而不是隐藏的服务器端 api 密钥)?我认为我没有看到其他方法来限制 Google Dev Console 中的密钥(通过 IP,但这不适用于客户端 api 密钥,因为最终用户对于公共网站有不同的 ip)。 (4认同)
  • 刚刚测试了一下,URL保护简直就是个垃圾。任何人都可以使用 Referer 运行 wget 并烧掉你的钱包。 (3认同)
  • @armyofda12mnkeys 当我研究这个主题时,唯一安全的方法(我所说的安全是指不可能窃取 API 密钥)是反向代理。不幸的是,当使用 google JS SDK 时,它实际上不起作用。您将能够在不暴露 API 密钥的情况下获取 SDK,但是一旦 SDK 下载到客户端,它将使用您的 API 密钥发出请求,例如可以通过浏览器开发人员工具轻松观察到该请求。但是,如果您使用 REST API 而不是 SDK,则可以代理这些请求,而无需公开 API 密钥。但不确定 google 是否提供相应的 REST API。 (2认同)
  • 既然推荐人可以被欺骗,有人找到这个问题的答案吗?代理是一种解决方案,但在不妥协的情况下寻找更简单的解决方案似乎需要更多工作。 (2认同)

小智 17

您引用的API密钥最佳做法文章仅提供了使用API​​密钥的一般准则,而对于某些面向最终用户的API(例如Google Maps JavaScript API),您无法避免将API密钥暴露给最终用户.

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

当您在Google API控制台中创建密钥并选择Maps JavaScript API的设置凭据时,向导将指导您如何保护密钥,并会提示您输入要授权的网址.

  • 您会只使用第二个密钥进行本地主机测试吗?既然您不想在生产密钥上启用来自“localhost”的请求? (5认同)