Cordova/Phonegap:本地存储中的 RefreshToken

信息安全 移动的 javascript 手机 本地存储
2021-09-01 06:04:57

我(部分)遵循一个教程来开发一个基于 angularJS 的科尔多瓦应用程序。作者将刷新令牌存储在本地存储中,在同一教程的其中一个评论中据说这是非常糟糕的做法。这在另一个 stackexchange 问题中得到了证实。最佳做法是将刷新令牌存储在安全HttpOnlycookie 中。 OWASP也提到了这一点作为指导方针,他们再次主张使用 cookie,这在本机应用程序中是不可能的。

现在,我可以明白为什么当应用程序通过浏览器可用时这是不好的做法,但是如果我“phonegap”应用程序(使其成为本机应用程序),那么将刷新令牌存储在本地也是不好的做法贮存?

如果是这样,那么我应该在哪里存储刷新令牌,因为“本机”应用程序中不存在 cookie?

3个回答

好吧,根据PhoneGap/Cordova 安全指南,似乎不建议使用 localstorage 来存储敏感数据。 那你能做什么?

好吧,这里有两个我认为你可以使用的选项。

1-加密刷新令牌并将其加密存储在本地存储中。您可以使用 CryptoJS(一个用于加密/解密数据的 JS 库)使用 AES 加密您的令牌(请参阅此示例),它还有一个angularjs 模块

2-您可以使用Cordova 文件 API将刷新令牌存储在设备/手机文件系统上。为了获得更高级别的安全性,您可以加密数据并将其存储在设备文件系统中。请注意,在 android 上,您将被限制为 AES 128 位密钥大小,但使用一些第三方插件,您可以将其增加到 256。

实际上,Phonegap 应用程序并不是真正的“全原生”。只有系统功能(如文件访问、相机访问等)被翻译成它们的 Java 对应部分。它仍然使用 webview 和大量的 javascript 来实现应用程序的业务逻辑。

所以,回答你的问题,本地存储问题仍然是一个有效的问题,因为它是这些框架(PhoneGap、Cordova、Ionic 等)用来制作 UI 的 Web 视图组件的一个特性。

此外,所有带有标识/秘密元素(会话 ID、刷新令牌等)的请求都应通过HTTPS发出,以防止恶意观察者知道它们的值。

在您的 cookie 中标记的HttpOnly标志只会阻止该值通过 JavaScript 被操纵。因此,您还应该将Secure标志添加到这些 cookie,以避免通过未加密的连接发送它们。

如果您使用加密连接,请不要让它接受任何证书。请务必正确验证服务器提供的证书的有效性。

自签名证书的安全解决方案不是禁用检查或使其返回任何证书的“true”,而是固定您生成的证书或将用于创建证书的 CA 添加到受信任的 CA 列表中。

为了帮助您进一步寻求保护您的移动应用程序通信:

OWASP 文档解释了证书固定
页面,讨论了利弊,并提供了链接和
关于证书固定的示例 SE 问题

编辑:据
我所知,这是框架实现创建的不正确行为。长回答短:“这应该是可能的,但我们把事情搞砸了。” 我尝试为 phonegap 开发测试应用程序,但发现(实施)像这样的错误让我放弃并回到原生 Android。就是说,我希望您将我的答案恢复为零,因为这应该是正确的,因为您的应用程序不是您所说的本机,但不幸的是,由于 phonegap 的处理方式,无法解决问题。

我在这里找到了一些可以帮助的答案(我是讲法语的,只是为了提供帮助)https://stackoverflow.com/questions/36389354/securely-store-access-token-in-cordova