Cordova google 映射 api 密钥足够安全
Cordova google maps api key safe enough
我想知道我现在使用的 Google 地图 API 密钥是否安全。因为我有一个带有 Google 映射的 Cordova 应用程序,所以我生成了一个 API 密钥。我无法将我的域的密钥列入白名单,因为它在 phone.
上运行客户端
我的 API 密钥对于解压我的应用程序并阅读 index.html 或收听该应用程序发出的网络请求的任何人都是可见的。
有什么方法可以保护我的 API 密钥吗?如果没有,使用 Google 地图或任何其他使用 API 密钥进行身份验证的第三方 API 是安全的吗?
我看到了两种可能解决您的问题的方法。我已经亲自实现了它们(虽然不是使用 GMaps),但仍然有一些缺点。
(1) 您可以使用后端技术将 API 键添加到您的请求中。为此,建议使用类似 Apache2 mod_proxy 和 mod_rewrite 的组合。然后在您的应用程序中使用 URLs 指向您的代理服务器,即 https://yourserver.com/js/googleapis/maps/api/js and make mod_rewrite this URLs to something like https://maps.googleapis.com/maps/api/js?key=API_KEY
mod_rewrite 的规则(未测试)可能如下所示:
RewriteCond %{QUERY_STRING} ^$
RewirteRule ^/googleapis/maps/api/js (.*)$ https://https://maps.googleapis.com/maps/api/js?key=API_KEY
我想你明白了。这种方法的一大优点是您可以在您控制的服务器上完全隐藏您的私人信息。缺点是:如果您的应用程序导致高流量,您很可能会在代理计算机上遇到高流量。此外,如果攻击者找出 URL 到您的 Google 地图 API 代理端点,他们将很容易通过您的服务检索 GMaps API。
(2) 第二个选项是创建一个服务来检索您的 API 密钥。假设您的应用程序无论如何都已经需要某种形式的身份验证,您很冷走 API 密钥服务仅将 API 密钥分发给已注册和经过身份验证的用户的道路。
这两种方法在调试移动网络应用程序的更好工具方面都有其缺点。 IE。在桌面上使用 MacOS、XCode 和 Safari 的攻击者可以与您的 Cordova 应用程序建立调试会话,并逐步调试在您的应用程序中运行的 JS 代码。这意味着无论您在 Cordova 竞技场中做了什么,都可以很容易地附加到您的应用程序并读取变量。
对已接受的答案发表评论没有信用,但就个人而言,我会选择 建议的第二个选项。但是,他对攻击者调试您的 Production 应用程序的担忧并不适用于使用 Distribution Provisioning 配置文件构建的应用程序(例如提交到 App Store 时需要)——仅适用于使用 Developer Provisioning 配置文件签名的应用程序。 Google 应用程序也是如此。如果只调试产品应用程序是可能的,那就和安全说再见吧。
话虽如此,其他人可以查看应用程序的静态内容(因为应用程序只是一个 zip 文件)- 因此不要对任何密钥或安全信息进行硬编码。
就我个人而言,我也会在构建产品版本时混淆源代码。
希望对您有所帮助
我想知道我现在使用的 Google 地图 API 密钥是否安全。因为我有一个带有 Google 映射的 Cordova 应用程序,所以我生成了一个 API 密钥。我无法将我的域的密钥列入白名单,因为它在 phone.
上运行客户端我的 API 密钥对于解压我的应用程序并阅读 index.html 或收听该应用程序发出的网络请求的任何人都是可见的。
有什么方法可以保护我的 API 密钥吗?如果没有,使用 Google 地图或任何其他使用 API 密钥进行身份验证的第三方 API 是安全的吗?
我看到了两种可能解决您的问题的方法。我已经亲自实现了它们(虽然不是使用 GMaps),但仍然有一些缺点。
(1) 您可以使用后端技术将 API 键添加到您的请求中。为此,建议使用类似 Apache2 mod_proxy 和 mod_rewrite 的组合。然后在您的应用程序中使用 URLs 指向您的代理服务器,即 https://yourserver.com/js/googleapis/maps/api/js and make mod_rewrite this URLs to something like https://maps.googleapis.com/maps/api/js?key=API_KEY
mod_rewrite 的规则(未测试)可能如下所示:
RewriteCond %{QUERY_STRING} ^$
RewirteRule ^/googleapis/maps/api/js (.*)$ https://https://maps.googleapis.com/maps/api/js?key=API_KEY
我想你明白了。这种方法的一大优点是您可以在您控制的服务器上完全隐藏您的私人信息。缺点是:如果您的应用程序导致高流量,您很可能会在代理计算机上遇到高流量。此外,如果攻击者找出 URL 到您的 Google 地图 API 代理端点,他们将很容易通过您的服务检索 GMaps API。
(2) 第二个选项是创建一个服务来检索您的 API 密钥。假设您的应用程序无论如何都已经需要某种形式的身份验证,您很冷走 API 密钥服务仅将 API 密钥分发给已注册和经过身份验证的用户的道路。
这两种方法在调试移动网络应用程序的更好工具方面都有其缺点。 IE。在桌面上使用 MacOS、XCode 和 Safari 的攻击者可以与您的 Cordova 应用程序建立调试会话,并逐步调试在您的应用程序中运行的 JS 代码。这意味着无论您在 Cordova 竞技场中做了什么,都可以很容易地附加到您的应用程序并读取变量。
对已接受的答案发表评论没有信用,但就个人而言,我会选择
话虽如此,其他人可以查看应用程序的静态内容(因为应用程序只是一个 zip 文件)- 因此不要对任何密钥或安全信息进行硬编码。
就我个人而言,我也会在构建产品版本时混淆源代码。
希望对您有所帮助