Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 在电子桌面应用程序中存储敏感信息的最佳做法_Security_Electron_Github Actions - Fatal编程技术网

Security 在电子桌面应用程序中存储敏感信息的最佳做法

Security 在电子桌面应用程序中存储敏感信息的最佳做法,security,electron,github-actions,Security,Electron,Github Actions,我在使用Electron.js和React.js的桌面应用程序中工作,我必须存储一些敏感信息,如API密钥和数据库凭据。因此,我开始挖掘并决定在JSON文件中加密数据库凭据,并在其上使用模糊处理方法 现在我有两个密钥,一个用于加密,一个用于模糊处理。所以我关心的是如何安全地保存这些信息。我不太熟悉Electron,但如果我错了,请纠正我:据我所知,我们没有安全使用自定义环境变量的选项,因为我们需要将这些变量存储在本地,以便在应用程序中使用。所以做了一些研究,我发现其中一个策略是使用某种外部服务来

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

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

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

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

最后,在我的网页上,我必须使用EnvironmentPlugin来访问代码中的环境变量值

基本上,我在整个过程中都没有将密钥硬编码到代码中或存储在本地,但我不太明白将密钥硬编码(考虑到我使用的是私有存储库)与使用Github操作设置密钥值的过程之间的区别。因为理论上,Github将用值替换我的
process.env.my_KEY
,对吗?还是不


我的意思是,如果黑客使用某种软件获取我的“源代码”,他能看到我的密钥内容吗?我使用Github操作的过程足够安全,或者只是用来尽可能多地隐藏我的密钥值?

如果您在构建过程中特别需要密钥,那么是的,我建议使用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 }}
如果您在运行时需要它们,这意味着在运行您的电子应用程序时,您需要在系统本身中存储密钥,例如

根据用户是在windows、linux还是MacOs中,系统机密持有者会提示他们。e、 在MacOs中,他们会得到钥匙链的提示

    const keytar = require('keytar')

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

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