提问者:小点点

在Electron桌面应用程序中存储敏感信息的最佳实践


我在使用Electron. js和React.js的桌面应用程序中工作,我必须存储一些敏感信息,如API密钥和数据库凭据。所以我开始挖掘,并决定在JSON文件中加密数据库凭据,并在其上使用混淆方法。

现在我有两个SECRET_KEYS,一个用于加密,一个用于混淆。所以我关心的是如何安全地保存这些信息。我不是很熟悉Electron,但如果我错了,请纠正我:据我所知,我们没有安全使用自定义环境变量的选项,因为我们需要在本地存储这些变量才能在应用程序中使用。所以做了一些研究,我发现其中一种策略是使用某种外部服务来获得这些密钥。

PS:加密密钥将保存在S3中,但我仍然需要处理我的AWS密钥。

所以我使用GitHub Actions并在秘密选项中设置键值。基本上,我有一个工作流,它将有一个env选项来指定我的变量。这个过程发生在我构建之后。-我使用Typescript,所以我必须运行我的构建脚本将代码转换为JS。

最后,在我的Webpack上,为了访问代码中的环境变量值,我必须使用环境插件。

基本上,我所做的所有这些过程都不是为了在代码中硬编码我的KEYS或将它们存储在本地,但是我不太明白硬编码密钥(考虑到我使用的是私有存储库)和使用Github Actions设置密钥值的过程之间的区别。因为理论上,Github会用值替换我的process. env.MY_KEY,对吗?还是不是?

我的意思是,如果黑客使用某种软件来获取我的“源代码”,他能看到我的KEYS内容吗?我使用Github Actions所做的过程足够安全,还是只是被用来尽可能多地隐藏我的键值?


共1个答案

匿名用户

如果您在构建过程中特别需要密钥,那么是的,我建议使用github操作机密。因为它会在您构建应用程序时确保您的密钥安全。

    - name: Run Build
      run: # run commands that require keys for building something
      env:
         SECRET_KEY_1: ${{ secrets. SECRET_KEY_1 }}
         SECRET_KEY_2: ${{ secrets. SECRET_KEY_1 }}

如果您在运行时需要它们,这意味着在运行电子应用程序时,您将需要将密钥存储在系统本身中,使用类似https://github.com/atom/node-keytar

    const keytar = require('keytar')

    // Creates a secret
    keytar.setPassword('MyAppName', 'AccountName', 'secret');

    // Reads the secret
    const secret = keytar.getPassword('MyAppName', 'AccountName');

根据用户是在windows、linux还是MacO中,他们将得到系统机密持有者的提示。例如,在MacO中,他们将得到钥匙串的提示