reactjs - 从 redux-persist-transform-encrypt 隐藏 webpack bundle.js 中的密钥
问题描述
我将 redux-persist 与 redux-persist-transform-encrypt 结合使用来加密我在 localstorage 中的 redux 存储。所以我像这样实现了加密:
const encryptor = createEncryptor({
secretKey: 'my-super-secret-key',
onError: function(error) {
// Handle the error.
console.log(error);
}
});
const persistConfig: PersistConfig = {
key: 'citizentracker',
storage: storage,
blacklist: new Array('form'),
transforms: [encryptor]
};
一切正常,redux 存储在本地存储中加密。我注意到的问题是,当我通过 webpack 4 进行生产包时。在 bundle.js 文件中,您可以通过搜索“secretKey”来查看键值。当我这样做时,我能够看到:
{secretKey:"my-super-secret-key",onError:function(e){console.log(e)}}
有没有人知道一种生成用于加密的密钥的方法,但也可以隐藏该密钥以防止人们查看源代码中的 bundle.js?或其他使这种加密更安全的方法。
解决方案
所以我去探索做的一件事是uglifyjs-webpack-plugin
使用 webpack。这允许我通过 UglifyJsPlugin 的 mangle 属性来缩小对象属性名称。所以在下面的代码中,我告诉它通过正则表达式只缩小“secretKey”的对象属性。纯文本中的秘密仍然存在于 bundle.js 文件中,但至少现在更难找到了。仍在探索其他选择。
这是添加到 webpack 配置变量的优化属性中的新 webpack 插件。
optimization: {
minimizer: [
new UglifyJsPlugin({
uglifyOptions: {
mangle: {
properties: {
regex: /secretKey/
}
}
}
})
]
},
所以 bundle.js 的输出会变成:
{u:"my-super-secret-key",onError:function(e){console.log(e)}}
这有帮助,但当然希望听到更好的解决方案!
推荐阅读
- swift - 只有第一个添加到 struct 的项目被上传到 firebase
- python - 如何使用 selenium webdriver 和 python 等待并获取 web 元素的状态
- parallel-processing - 查找代码的串行和并行百分比
- hugo - 如何在 Hugo 中使用索引索引访问地图值?
- java - java.lang.NoClassDefFoundError:尝试在 Eclipse 中调试时
- html - 如何在html的下拉列表中制作带有一个选定项目的下拉列表
- azure - 将 DataFrame 从 Databricks 写入 Data Lake
- php - 如何使用 bash 脚本自动将密码短语输入到 docker 容器中?
- r - R:获取2个变量值以占用由新行分隔的单个单元格
- c# - EMGU CV 随机冻结系统,在控制台上抛出奇怪的错误