【问题标题】:Cordova google maps api key safe enoughCordova google maps api 密钥足够安全
【发布时间】:2015-04-01 08:07:19
【问题描述】:

我想知道我现在使用的 Google 地图 API 密钥是否安全。因为我有一个带有 Google 地图的 Cordova 应用程序,所以我生成了一个 API 密钥。我无法将我的域的密钥列入白名单,因为它在手机上运行客户端。

打开我的应用程序并阅读 index.html 或收听应用程序发出的网络请求的任何人都可以看到我的 API 密钥。

有什么方法可以保护我的 API 密钥?如果没有,使用 Google 地图或任何其他使用 API 密钥进行身份验证的第三方 API 是否安全?

【问题讨论】:

  • 您使用的是 javascript SDK 还是插件? javascript SDK v3 不需要 API 密钥
  • 您从何处获得此信息? Here 他们谈到,对于每个谷歌地图 api 请求,都需要一个 API 密钥
  • 自 2010 年以来我一直在使用 v3,没有 API 密钥。我刚刚读到他们在 2012 年增加了使用 API 密钥的可能性,因为他们增加了使用限制stackoverflow.com/questions/2769148/…
  • 您可以创建一个简单的插件,从本机端获取 API 密钥,然后异步加载 .js,但“黑客”也可以从本机代码中获取 API 密钥

标签: google-maps cordova


【解决方案1】:

无法评论已接受的答案,但就个人而言,我会选择Matthias Steinbauer 建议的第二个选项。但是,他对攻击者调试您的生产应用程序的担忧不适用于使用分发配置文件构建的应用程序(例如在提交到 App Store 时需要)——仅适用于使用开发人员配置文件签名的应用程序。 Google Apps 也是如此。如果可以只调试 prod 应用程序,那就告别安全问题。

话虽如此,其他人可以查看应用的静态内容(因为应用只是一个 zip 文件) - 所以不要硬编码任何密钥或安全信息。

就个人而言,我在构建 prod 版本时也会混淆源代码。

希望对你有帮助

【讨论】:

    【解决方案2】:

    我看到您的问题有两种可能的解决方案。我已经亲自实现了它们(虽然不是使用 GMaps),但仍然有一些缺点。

    (1) 您可以使用后端技术将 API 密钥添加到您的请求中。为此,建议使用 Apache2 mod_proxy 和 mod_rewrite 之类的组合。然后在您的应用程序中使用指向您的代理服务器的 URL,即 https://yourserver.com/js/googleapis/maps/api/js 并将此 URL 修改为 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
    

    我想你明白了。这种方法的最大优点是您可以在您控制的服务器上完全隐藏您的私人信息。缺点是:如果您的应用程序导致高流量,您很可能会在代理机器上遇到高流量。此外,如果攻击者找出您的 Google Maps API 代理端点的 URL,他们将很容易通过您的服务检索 GMaps API。

    (2) 第二种选择是创建一个服务来检索您的 API 密钥。假设您的应用程序已经需要某种形式的身份验证,无论如何您都会走上一条 API 密钥服务仅将 API 密钥分发给已注册和经过身份验证的用户的道路。

    在调试移动网络应用程序的更好工具方面,这两种方法都有其缺点。 IE。在桌面上使用 MacOS、XCode 和 Safari 的攻击者可以与您的 Cordova 应用程序建立调试会话,并逐步调试在您的应用程序中运行的 JS 代码。这意味着您在 Cordova 竞技场中所做的任何延伸都非常容易附加到您的应用程序并读取变量。

    【讨论】:

    • 我认为第一个选项不可用,因为代理 URL 必须在我的源文件中进行硬编码,这样攻击者才能读取它。但我认为你是对的。确保不直接从我的源文件中读取 API 密钥的唯一方法是仅在用户通过身份验证时从我自己的 API 中检索 API 密钥。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2011-03-27
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多