我正在构建一个Web应用程序,将发送电子邮件进行注册验证。我将使用https://github.com/RGBboy/express-mailer。我想知道在代码中显示电子邮件密码并将其推送到托管应用程序的服务器(Heroku、AWS等)上是否安全。如果不是,我应该使用什么替代方法来“隐藏”密码?
.env
文件来完成,该文件将被加载并将其值暴露给正在运行的代码。由于 [express-mailer] [2]
是一个Node应用程序,我建议使用一些npm包,如{{link3: dotenv }}或{{link4: node-env-file }}自动执行此加载。我个人更喜欢 dotenv
,我觉得它更简单。
你还应该查看this article,了解有关.env
文件使用的内容。基本思想是让你的.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>
另一种选择是在您的源代码中加密用户凭据,并从源代码中解密它们。
不应该在版本控制中存储机密信息。
其中一种替代方案(我个人最喜欢的)是将应用程序的机密信息设置为生产环境中的环境变量。我认为Heroku支持此功能。例如Rails采取的也是这种方式。开发/测试“机密信息”(实际上并非真正有价值的凭据)仍可以存储在您的版本控制系统中。