如何:发布iOS App时安全存储秘密令牌(本机)

时间:2018-12-05 18:02:05

标签: ios nativescript

我的Nativescript应用程序具有一些秘密api令牌。我想将该应用发布到iOS应用商店。发布应用程序时,我需要做些什么来使令牌保密?

我看到有关使用Webpack环境变量存储机密的讨论here。我是webpack的新手,但看来这是最好的方法。

在讨论之后,我可以将令牌放入webpack捆绑包(而不是对其进行硬编码),如下所示:

$ tns run ios --bundle --env.uglify --env.aot --env.secret_token="yaySecret"

但这是否使“ yaySecret”秘密?我在NS文档或在线中都看不到此问题。

我假设此bundle命令创建了一个包,然后该包成为Apple发布的内容的一部分。但是,Apple不能查看“ yaySecret”吗?

1 个答案:

答案 0 :(得分:0)

Uglify实际上在这里完成工作(--env.uglify)。

--env.secret_token只是传递给编译器的参数。它将根据您的webpack定义配置将源代码中变量的出现替换为实际值。

您的webpack配置中应该具有与此类似的内容

 // Define useful constants like TNS_WEBPACK
 new webpack.DefinePlugin({
  "global.TNS_WEBPACK": "true",
  "global.SECRET_TOKEN": JSON.stringify(env.secret_token),
  "process": undefined,
 }),

因此,在您的实际源代码中所有global.SECRET_TOKEN出现的地方都将替换为您在命令行中传递的实际令牌。

到目前为止,它与安全性无关,对APK进行反向工程可能会显示整个源代码和令牌值。使用 Uglify 之类的最小化工具会使您的代码难以阅读。

市场上还有许多其他的最小化器/混淆器,javascript-obfuscator是我看到人们经常与NativeScript一起使用的一种免费工具。所有这些工具都有大量的选项,如果您想正确地加密代码,则可能需要更加注意这些选项。

甚至还有诸如jscrambler之类的付费工具。使用混淆器不仅限于NativeScript / JavaScript,甚至许多本机Android应用程序都使用Java混淆器来防止从APK中提取源代码和敏感信息。因此,无论选择哪种平台,使用混淆器都是非常普遍的。

另外,您可以做的是,不要简单地对令牌进行硬编码。您可以将一些加密的值传递给env.secret_token,然后编写一些复杂的函数,该函数可以采用该加密的值并在运行时为您提供实际的令牌。归根结底,这就是使您的代码更难破解的原因。