2013-02-27 28 views
7

我正在嘗試做一個簡單的應用程序,它將發送一封電子郵件。我使用MailMessageSmtpClient類。 SmpClient需要登錄名和密碼才能使用。以安全的方式發送電子郵件

  • 使用簡單字符串編譯登錄名/密碼的應用程序是否安全?
  • 這是可能的反彙編,並獲得密碼?
  • 如何將其從潛在的攻擊者隱藏?
  • 這是可以使用登錄名/密碼發送電子郵件w/o嗎?
+2

您將需要加密密碼,因爲任何純字符串都可以使用反射器等工具輕鬆查看。我要麼提示用戶,要麼將加密的密碼存儲在配置類型文件中。 – 2013-02-27 15:35:22

+1

創建一個**服務帳戶**,可以發送電子郵件(但不做其他事情)並加密憑據? – SpaceBison 2013-02-27 15:35:35

回答

6

是的,在您的應用程序的任何位置以純文本格式存儲密碼是不安全的。不要這樣做!

相反,你應該存儲密碼在App.config文件加密(在配置文件中或其他地方,machine.config中爲例):

Encrypting and Decrypting ApplicationConfigSections

另外,您可以在運行時詢問用戶的憑證。

如果您想避免明確提供密碼,您可以通過對當前登錄用戶的Windows身份驗證進行身份驗證。爲此,您可以使用SmtpClient.UseDefaultCredentials發送郵件。當然,這隻有在SmtpServer識別用戶Windows憑據時纔有效。


如果您想避免中間人攻擊和數據包嗅探,那麼您應該使用SSL來傳輸身份驗證數據。您可以通過enabling SSL in the configuration或者您自己設置屬性來完成:SmtpClient.EnableSsl。 (.NET> = 4.0)

+0

看起來我需要現在閱讀很多來了解這個App.config的東西。在Asp.net中,我看到了類似這樣的內容,但在WinForms中我看不到它。不過,我會爲此着急。但是,當SmtpClient發送消息時,對於使用數據包嗅探器的攻擊者是否可見密碼? – zgnilec 2013-02-27 15:46:47

+1

您可以使用SSL發送郵件,因此密碼將不會以純文本形式發送,您可以安全使用數據包嗅探器。 – magnattic 2013-02-27 15:50:16

+0

如何以加密形式存儲密碼有用?如果它被加密,應用程序將不得不解密它,所以密碼* *將*必須在程序二進制文件中未加密,等等。 – 2013-02-27 15:57:45

相關問題