2013-02-27 3 views
7

Ich versuche, eine einfache Anwendung, die eine E-Mail senden wird. Ich verwende MailMessage und SmtpClient Klassen. SmpClient erfordert ein Login und ein Passwort, um zu funktionieren.Senden Sie E-Mail in sicherer Weise

  • Ist es sicher zu kompilieren Anwendung mit Login/Passwort in einfachen String?
  • Ist das möglich, dies zu zerlegen, und Passwort erhalten?
  • Wie Sie es vor potenziellen Angreifer verstecken?
  • Ist es möglich, E-Mails ohne Login/Passwort zu senden?
+2

Sie müssen das Kennwort verschlüsseln, da jede einfache Zeichenfolge mit Tools wie Reflector einfach angezeigt werden kann. Ich würde entweder einen Benutzer auffordern oder ein verschlüsseltes Passwort in einer Konfigurationsdatei speichern. –

+1

Erstellen Sie ein ** Dienstkonto **, das E-Mails senden kann (aber nicht viel mehr) und die Anmeldeinformationen verschlüsselt? – SpaceBison

Antwort

6

Ja, das Speichern des Kennworts im Klartext in Ihrer Anwendung ist nicht sicher. Tu es nicht!

Stattdessen sollten Sie das Passwort speichern in Ihrer App.config Datei verschlüsselt (oder irgendwo anders in einer Konfigurationsdatei, machine.config zum Beispiel):

Encrypting and Decrypting ApplicationConfigSections

Alternativ können Sie Fragen Sie den Benutzer zur Laufzeit nach den Anmeldeinformationen.

Wenn Sie nicht explizit ein Passwort angeben möchten, können Sie sich über die Windows-Authentifizierung des aktuell angemeldeten Benutzers authentifizieren. Dazu können Sie SmtpClient.UseDefaultCredentials zum Senden der Mail verwenden. Dies funktioniert natürlich nur, wenn der SmtpServer die Windows-Anmeldedaten des Benutzers erkennt.


Wenn Sie von Man-in-the-Middle-Angriffen und Paket sicher sein wollen, Sniffing, sollten Sie SSL verwenden, um die Authentifizierungsdaten zu übertragen. Sie können dies tun, indem Sie enabling SSL in the configuration oder nur die Eigenschaft selbst einstellen: SmtpClient.EnableSsl. (.NET> = 4.0)

+0

Sieht so aus, als müsste ich jetzt viel lesen, um diese App.config-Sache zu verstehen. In Asp.net sah ich so etwas, aber in WinForms sehe ich es nicht. Aber ich werde darüber rot werden. Aber wenn SmtpClient eine Nachricht sendet, ist das Passwort für Angreifer sichtbar, die Packet Sniffer verwenden? – zgnilec

+1

Sie können SSL zum Senden der E-Mail verwenden. Das Kennwort wird dann nicht im Klartext gesendet und Sie sind vor Paket-Sniffern geschützt. – magnattic

+0

Wie ist das Speichern des Passworts in verschlüsselter Form sinnvoll? Wenn es verschlüsselt ist, muss die App es entschlüsseln, und so muss das Passwort für * das * unverschlüsselt in der Programm-Binärdatei usw. sein. –