在内部控制台应用程序中嵌入密码

Embedding password in and Internal Console App

我即将发布一个控制台应用程序到我们的一台服务器上,由任务计划程序每天 运行 执行。根据特定条件,该应用程序将通过 Office 365 向选定用户发送电子邮件。当然,为了向用户发送电子邮件,我需要使用电子邮件帐户的凭据。

鉴于这是我们其中一台服务器上的内部应用程序,将用户名和密码嵌入到代码中是否安全?如果不是,安全解决此问题的最佳做法是什么?

如果有帮助,这是我的电子邮件功能代码(用 C# 编写):

String userName = "my.email@organization.ca";
String password = "myPassword";

MailMessage msg = new MailMessage();
msg.To.Add(new MailAddress(user.getEmail()));
msg.From = new MailAddress(userName);
msg.Subject = "My Subject";
msg.Body = "My message";
msg.IsBodyHtml = true;
SmtpClient client = new SmtpClient();
client.Host = "mail.office365.com";
client.Credentials = new System.Net.NetworkCredential(userName, password);
client.Port = 587;
client.EnableSsl = true;
client.Send(msg);

编辑:我应该补充一点,只有管理员才能访问这个特定的服务器。

is embedding the username and password in the code safe

当然不是。在没有适当保护的情况下存储凭据永远不会安全。每个有权访问代码或可执行文件的用户都可以提取凭据。

如果我是你,我会把这些凭据存储在它运行的机器上的一个加密文件中,并且只有服务用户才能访问它。使用设备专用密钥加密文件,因此即使其他用户可以获得该文件,也无法解密,因此对他们来说毫无用处。

这是不安全的,因为任何有权访问该代码或应用程序的人都可以轻松获得该帐户的密码。

这是关于风险与回报的关系。如果恶意玩家可以访问代码或服务器,那么与有人能够访问可以轻松恢复或关闭的邮件帐户相比,您肯定有更大的问题需要担心。

是否值得为避免这种结果而付出额外的努力?由你决定。

可以说配置细节至少应该在 App.config 中,以便在密码过期时可以轻松更改它们,否则您将不得不重新编译和重新部署整个解决方案。

理想情况下,如果您想尽可能安全,您应该研究可用于对配置文件进行加密的各种方法。只需搜索 c# encrypt configuration 就足以 material 让您入门。