我想知道我的Google地图API密钥是否安全,就像我现在使用它一样。因为我有一个带有Google地图的Cordova应用程序,所以我生成了一个API密钥。我无法将密钥列入我的域名,因为它在电话上运行客户端。
此外,我的API密钥对于解压缩我的应用并阅读index.html或收听应用程序发出的网络请求的任何人都可见。
有没有办法保护我的API密钥?如果没有,可以安全地使用Google地图或使用API密钥进行身份验证的任何其他第三方API吗?
答案 0 :(得分:2)
我看到了两个可能的问题解决方案。我已经亲自实施了这两个(虽然不是GMaps),但仍有一些缺点。
(1)您可以使用后端技术为您的请求添加API密钥。为此,建议使用Apache2 mod_proxy和mod_rewrite之类的组合。在您的应用中,您可以使用指向您的代理服务器的网址,即https://yourserver.com/js/googleapis/maps/api/js,并将此网址的mod_rewrite设为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代理端点的网址,他们将很容易通过您的服务检索GMaps API。
(2)第二个选项是创建一个服务来检索您的API密钥。假设您的应用程序已经需要某种形式的身份验证,那么您就可以开始使用API密钥服务将API密钥分发给已注册和经过身份验证的用户。
对于调试移动Web应用程序的更好工具,这两种方法都有其缺点。即在桌面上使用MacOS,XCode和Safari的攻击者可以为您的Cordova应用程序建立调试会话,并逐步调试在您的应用程序内运行的JS代码。这意味着您在Cordova舞台上所做的任何伸展都很容易附加到您的App并读取变量。
答案 1 :(得分:0)
我不愿评论已接受的答案,但就我个人而言,我会选择Matthias Steinbauer建议的第二个选项。但是,他对攻击者调试生产应用程序的担心不适用于使用分发配置文件配置文件构建的应用程序(例如,提交到App Store时必需),仅适用于使用开发者配置文件签名的应用程序。 Google Apps也是如此。如果可以仅调试产品应用程序,然后告别安全性。
话虽如此,其他人可以查看某个应用程序的静态内容(因为该应用程序只是一个zip文件)-因此,请勿对任何密钥或安全信息进行硬编码。
个人而言,在构建产品版本时,我也会混淆源代码。
希望有帮助