我正在构建一个网络应用程序,它将发送电子邮件以进行注册验证。我将使用https://github.com/RGBboy/express-mailer。我想知道在代码中显示电子邮件密码并将其推送到托管应用程序的服务器(Heroku,AWS等)是否安全。如果没有,我应该使用哪些替代方法来“隐藏”密码?
答案 0 :(得分:1)
在版本控制下存储明文密钥/凭证通常被认为是不好的做法。因为这可能导致security issues
通常将这些类型的信息设置为环境变量。 Heroku有一个pretty straightforward way of doing this configuration。您可以使用他们的Web管理员,也可以通过命令行设置它们。
对于其他情况,例如您的开发设置,可以使用.env
文件来完成,这些文件已加载并将其值暴露给您正在运行的代码。由于[express-mailer][2]
是一个节点应用程序,我建议使用一些npm包,如dotenv
或node-env-file
自动执行此加载。我个人更喜欢dotenv
,我觉得这更简单。
您还应该查看有关.env
文件使用情况的this article。基本的想法是让您的.gitignore
(或等效文件)忽略您的.env
文件,从而确保您的版本控制中永远不会引入您的秘密凭据。然后设置.env.sample
文件以向开发人员显示需要在所述.env
文件上声明哪些数据。
示例:
<强> .ENV 强>
EMAIL=foo@bar.com
PASSWORD=AahUbf796
S3_TOKEN=ASVNS7843NCA87SDVNBRT9
<强> .env.sample 强>
EMAIL=<email to access the account>
PASSWORD=<secret password>
S3_TOKEN=<s3 token for application foobar>
答案 1 :(得分:0)
你不应该在版本控制中存储秘密。
一种替代方案(我个人最喜欢的方法)是将秘密设置为生产环境中应用程序的环境变量。 Heroku我认为支持这个。这也是Rails采用的方法。开发/测试“秘密”(实际上不是任何有价值的真实凭证)当然可以存储在您的VCS中。
答案 2 :(得分:0)
另一种选择是加密源代码中的用户凭据并从源代码中解密它们。