我即将将控制台应用程序发布到我们的一台服务器上,以便每天由任务调度程序运行。根据某些条件,应用程序将通过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);
编辑:我应该补充说,只有管理员才能访问此特定服务器。
答案 0 :(得分:1)
将用户名和密码嵌入代码安全
当然不是。在没有得到适当保护的情每个有权访问代码或可执行文件的用户都可以提取凭据。
如果我是你,我会将这些凭据存储在其运行的机器上的加密文件中,只有服务用户才能访问它。使用特定于设备的密钥对文件进行加密,因此即使其他用户可以获取该文件,它也无用,因为他们无法对其进行解密。
答案 1 :(得分:0)
任何有权访问该代码或应用程序的人都可以轻松获取该帐户的密码,这是不安全的。
关于风险与回报的关系。如果恶意播放器可以访问代码或服务器,那么肯定比有人能够访问可以轻松恢复或关闭的邮件帐户有更大的问题。
是否值得通过额外的麻烦来防止这种结果?它取决于你。
可以说配置细节至少应该在App.config中,以便在密码过期时可以轻松更改,否则您必须重新编译并重新部署整个解决方案。
理想情况下,如果您希望尽可能安全,您应该查看可用于执行配置文件加密的各种方法。对c# encrypt configuration
进行简单搜索就有足够的资料让您入门。