【问题标题】:How to protect Google Maps API key on Ionic app?如何保护 Ionic 应用程序上的 Google Maps API 密钥?
【发布时间】:2019-11-12 21:23:29
【问题描述】:

我为 Android 和 iOS 发布了 Ionic PWA 应用程序(我使用 Capacitor 生成本机构建)。在前端代码中,它有我的 Google Maps API 密钥,但是,我不能将其限制为 google 提供的任何选项,因为...

  1. HTTP 引荐来源网址 - 它不在公共域名上,它在本机应用程序的 web 视图内的本地主机上。 http://localhost/ 适用于 Android,capacitor://localhost/ 适用于 iOS。将这些用作限制似乎不太安全,因为它们非常通用,并且所有其他应用程序都将具有相同的限制。

  2. IP 地址 - 原因显而易见。

  3. Android 应用程序 - 它不在本机代码中,而是在 web 视图中。
  4. iOS 应用程序 - 它不在本机代码中,而是在 web 视图中。

这些选项都不适合我的情况。那么如何保护我的 API 密钥免遭滥用?

有什么想法吗?我不能是唯一一个在 Ionic 应用程序中使用 Google Maps API 的人。

【问题讨论】:

  • 使用本地 GoogleMap 并点击此链接,它会帮助您baadiersydow.com/…
  • 这就是使用电容器的全部意义所在。你不必使用任何原生的东西。
  • @nachshonf 我也有同样的问题,设置主机名配置导致连接错误等其他问题,您找到解决方案了吗?

标签: android ios google-maps google-api ionic4


【解决方案1】:

您可以配置电容器应用程序的主机名

"server": {
    // You can configure the local hostname, but it's recommended to keep localhost
    // as it allows to run web APIs that require a secure context such as
    // navigator.geolocation and MediaDevices.getUserMedia.
    "hostname": "unique-app",
  }

然后将 API 密钥限制为 capacitor://unique-app

https://capacitor.ionicframework.com/docs/basics/configuring-your-app

【讨论】:

  • 我遇到了问题...在为 prod 构建后,在 iOS 上,应用程序打开时出现空白屏幕。仅当我设置自定义主机名时才会发生这种情况。
  • 为了让它在 android 上运行,我还必须为 https://unique-app/* 添加一个限制
  • “黑客”不能创建自己的电容器应用程序,在其中将主机名参数设置为与您相同的值吗?然后他们可以访问 API 并发送不需要的请求。还是我错了?
【解决方案2】:

为了保护您的 API 密钥,您必须在 web 视图中检查 window.location.href 的值。我猜你会看到类似file://some/path

因此,您需要为此路径应用 HTTP 引荐来源网址限制。请注意,带有 file:// 协议的 URL 需要特殊表示,如

中所述

https://developers.google.com/maps/documentation/javascript/get-api-key#restrict_key

注意: file:// 引用者需要一个特殊的表示来添加到密钥限制中。在添加到密钥限制之前,应将“file://”部分替换为“__file_url__”。例如,“file:///path/to/”应格式化为“__file_url__//path/to/*”。启用 file://referers 后,建议您定期检查您的使用情况,以确保它符合您的期望。

我希望这会有所帮助。

【讨论】:

  • 我正在使用电容器,它使用 localhost/ (android) 和电容器://localhost/ (iOS) 来拉起 webview。将这些用作限制似乎不太安全,因为它们非常通用,并且所有其他应用程序都将具有相同的限制。有什么建议吗?
猜你喜欢
  • 2020-09-06
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 2023-03-02
  • 2011-06-23
  • 1970-01-01
  • 2021-06-01
  • 2010-11-24
相关资源
最近更新 更多