如何安全使用Google API密钥


77

因此,我正在执行的第一个项目上使用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控制台凭据页面重新生成API密钥。然后,更新您的应用程序以使用新生成的密钥。生成替换密钥后,您的旧密钥将继续工作24小时。在公开发布代码之前,请先对其进行检查:


现在我的问题是,如果不直接将其放入代码中,我将无法弄清楚如何将Google Map整合到我的网站中。现在,我的API像这样在我的index.html中:

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

但这再次直接在我的代码中供全世界使用,我认为这是错误的方式。


Answers:


71

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

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

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


21
它限制对URL是不安全的,因为HTTP推荐很容易被欺骗
丹尼海洋

@Danny Ocean,如果将其限制为一个URL是不安全的(因为http引荐来源网址可能被欺骗或有人可以在其主机上运行带有主机文件的api-key并将您的url指向其本地主机服务器),那么最好的保护方法是Google API密钥(例如Javascript Google Maps API)可将api密钥公开给客户端/最终用户(而不是隐藏的服务器端api-key)?我认为我没有看到其他方法来限制Google Dev Console中的密钥(通过IP限制),但这不适用于客户端api-key,因为最终用户对于公共网站具有不同的ips)。
Armyofda12mnkeys

1
当我研究此主题时,@ armyofda12mnkeys唯一安全的方法(通过安全,我想不可能偷走API密钥)将是反向代理。不幸的是,当使用google JS SDK时,它实际上是行不通的。您可以在不暴露API密钥的情况下获取SDK,但是一旦在客户端上下载了SDK,它将使用您的API密钥发出请求,例如,可以通过浏览器开发人员工具轻松观察到。但是,如果您将使用REST API而不是SDK,则可以在不公开API密钥的情况下代理这些请求。不过,不确定Google是否提供了相应的REST API。
Danny Ocean,

18

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

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

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

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.