我的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”吗?
答案 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
,然后编写一些复杂的函数,该函数可以采用该加密的值并在运行时为您提供实际的令牌。归根结底,这就是使您的代码更难破解的原因。