【问题标题】:Embedding password in and Internal Console App在内部控制台应用程序中嵌入密码
【发布时间】:2018-05-18 00:30:48
【问题描述】:

我即将在我们的一台服务器上发布一个控制台应用程序,以便由任务调度程序每天运行。根据某些条件,应用程序将通过 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);

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

【问题讨论】:

  • 你为什么不在 App.Config 中加密密码并从那里读取.. 谷歌搜索如何加密 .Confg 部分比硬编码更容易它还重构你的代码,以便它利用Auto Disposing of Objects 但使用using() { } 构造
  • 不,这不安全,在密码泄露的情况下也不灵活。这些值应在安装/首次运行时作为配置收集。
  • 澄清一下,只有管理员有权登录到这个特定的服务器。

标签: c# security passwords console-application internal


【解决方案1】:

正在将用户名和密码嵌入代码保险箱中

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

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

【讨论】:

    【解决方案2】:

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

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

    为了防止这种结果而付出额外的麻烦是否值得?这取决于你。

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

    理想情况下,如果您希望尽可能安全,您应该研究可用于执行配置文件加密的各种方法。简单搜索 c# encrypt configuration 即可获得足够的资料来帮助您入门。

    【讨论】:

      猜你喜欢
      • 2011-04-09
      • 2018-07-27
      • 2011-03-25
      • 2017-03-14
      • 1970-01-01
      • 2017-09-10
      • 2012-07-15
      • 2013-12-18
      相关资源
      最近更新 更多