Security 在电子桌面应用程序中存储敏感信息的最佳做法
我在使用Electron.js和React.js的桌面应用程序中工作,我必须存储一些敏感信息,如API密钥和数据库凭据。因此,我开始挖掘并决定在JSON文件中加密数据库凭据,并在其上使用模糊处理方法 现在我有两个密钥,一个用于加密,一个用于模糊处理。所以我关心的是如何安全地保存这些信息。我不太熟悉Electron,但如果我错了,请纠正我:据我所知,我们没有安全使用自定义环境变量的选项,因为我们需要将这些变量存储在本地,以便在应用程序中使用。所以做了一些研究,我发现其中一个策略是使用某种外部服务来拥有这些密钥 PS:加密密钥将保存在S3中,但我仍然需要处理我的AWS密钥 因此,我使用Github操作并在secrets选项中设置键值。基本上,我有一个工作流,它将有一个env选项来指定我的变量。这个过程发生在我的构建之后我使用的是Typescript,所以我必须运行构建脚本才能将代码转换为JS 最后,在我的网页上,我必须使用EnvironmentPlugin来访问代码中的环境变量值 基本上,我在整个过程中都没有将密钥硬编码到代码中或存储在本地,但我不太明白将密钥硬编码(考虑到我使用的是私有存储库)与使用Github操作设置密钥值的过程之间的区别。因为理论上,Github将用值替换我的Security 在电子桌面应用程序中存储敏感信息的最佳做法,security,electron,github-actions,Security,Electron,Github Actions,我在使用Electron.js和React.js的桌面应用程序中工作,我必须存储一些敏感信息,如API密钥和数据库凭据。因此,我开始挖掘并决定在JSON文件中加密数据库凭据,并在其上使用模糊处理方法 现在我有两个密钥,一个用于加密,一个用于模糊处理。所以我关心的是如何安全地保存这些信息。我不太熟悉Electron,但如果我错了,请纠正我:据我所知,我们没有安全使用自定义环境变量的选项,因为我们需要将这些变量存储在本地,以便在应用程序中使用。所以做了一些研究,我发现其中一个策略是使用某种外部服务来
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');