我应该采取哪些措施来保护我的Google Maps API密钥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我应该采取哪些措施来保护我的Google Maps API密钥?相关的知识,希望对你有一定的参考价值。
我已为我的域获取了Google Maps API密钥。
我获取密钥时提供的示例显示了嵌入在请求参数中的密钥,例如:
<script src="http://maps.google.com/maps?file=api&v=2&sensor=true_or_false&key=my-key" type="text/javascript"></script>
我感谢请求中的referrer字段必须与我的域匹配,在脚本标记中使我的密钥可见是否安全?或者我还有其他步骤吗?
考虑到密钥必须包含在html页面的<script>
标签中,要从谷歌服务器加载JS文件/数据,您无能为力:
- 你必须把它放在你的HTML文件中
- 每个人都可以看看那些。
尽管如此,这并不重要:如果有人试图在另一个域上使用此密钥而不是你的,他们将获得一个Javascript警报 - 这对其他用户来说并不好。
所以:
- 你无能为力;这是它的工作方式
- 我会说,你应该担心的并不多。
Google API控制台上有一个设置可以保护您的API带宽使用不被其他域/用户使用。您可以在API控制台上使用referrer来限制和保护它。 API密钥将拒绝没有符合您限制的引荐来源的请求。
以下是Google针对API Key的屏幕截图,该屏幕只能由Google用于其两个域。
虽然这个问题已有几年历史,但它是一个非常好的问题。据我所知,它暴露API密钥,即使它们是域匹配的,仍然可能导致滥用。 Security Stack Exchange上有一篇文章更详细地介绍了这一点。
Google可以在此发布您可以采取的避免潜在滥用行为的步骤:
安全使用API的最佳实践指南:https://support.google.com/cloud/answer/6310037?hl=en
虽然我建议将所有这些都放在船上,但是有一种方法可以处理Brabster发布的特定示例,并将密钥存储在环境变量中。这样,您只需将密钥替换为存储在项目中的服务器端变量即可。但是,请确保不将存储密钥的文件提交到公用存储库。
我不明白为什么你会打扰。密钥只对您的域名有效吗? IIRC,其中编码的唯一信息是您的域名,除了Google可能添加的任何信息,例如生成的时间。
您应该使用后端/服务器端来保护和处理密钥。在我的情况下,我使用Django f / w服务器端,它可以提供ajax调用从服务器脚本/ db获取密钥,然后将其传递到谷歌api。
你可以使用php来做到这一点
1.将密钥保存在名为key.ini的文件中,格式为googlemaps_api_key=xxxxxxxxxxxxxxxxx
2.将文件保存在网站根文件夹之外的some_folder中,如在home / my_website / some_folder / key.ini中,我的网站根目录为home / my_website / public_html /
3.在.php页面(不是.html页面)中调用最新的google地图脚本并添加
<?php $config['googlemaps_api_key']?>
而不是实际的API密钥,而不是
<script src="https://maps.googleapis.com/maps/api/js?key=<?php $config['googlemaps_api_key']?>&callback=initMap" async defer></script>
现在网页不会向公众显示实际的密钥。结果将是
<script src="https://maps.googleapis.com/maps/api/js?key=&callback=initMap" async="" defer=""></script>
您还可以CHMOD some_folder和key.ini以进一步限制访问。 请参阅此处以安全存储任何凭据 https://security.stackexchange.com/questions/152590/how-to-securely-connect-to-a-database-with-php
以上是关于我应该采取哪些措施来保护我的Google Maps API密钥?的主要内容,如果未能解决你的问题,请参考以下文章
Google 是不是采取了措施来防止恶意 Places API 滥用?