5

Es scheint, dass jede Anwendung, die ich erstelle, in der Lage sein muss, gelegentlich E-Mails zu senden. Z.B. Status E-Mails. Für diese Frage sei angenommen, dass meine Anwendung ein Backup-Tool ist, lokal auf vielen Windows-Clients installiert ist und jede Installation tägliche Status-Mails senden muss. Es könnte auf dem Server einer Organisation oder auf einem privaten Computer installiert werden.Meine Anwendungen müssen E-Mails senden, wo und wie sollte ich das SMTP-Passwort speichern?

Ich bitte den Benutzer, die Zugangsdaten zu einem E-Mail-Konto, das er besitzt (STMP-Host, Port, Benutzername, Passwort, Von-Adresse) anzugeben. Ich kopierte diesen Ansatz von Anwendungen wie Atlassian Jira/Confluence oder JFrog Artifactory. Wo und wie speichern sie die SMTP-Passwörter?

Mein derzeitiges Verständnis ist: Salting/Hashing Ansätze gelten hier nicht, da ich das Klartext-Passwort abrufen müssen, um die E-Mails tatsächlich zu senden. Ich möchte die Passwörter nicht im Klartext speichern, also muss es eine Art Verschlüsselungs-/Entschlüsselungsansatz sein (richtig?).

Ich kann dem Benutzer mitteilen, dass er sein Haupt-E-Mail-Konto nicht verwenden, sondern ein sekundäres Konto verwenden oder, noch besser, ein spezielles E-Mail-Konto einrichten soll, das nur von meiner Anwendung verwendet werden soll. Wenn der Benutzer ein Administrator einer Organisation ist, kann er möglicherweise ein E-Mail-Konto auf seinem Exchange-Server einrichten oder die SMTP-Weiterleitung konfigurieren. Aber ich kenne mich, und ich kenne meine privaten Benutzer, einige von ihnen werden sowieso nur ihren Haupt-E-Mail-Account verwenden, also möchte ich alles tun, um ihre Anmeldeinformationen so sicher wie möglich zu halten (damit meine ich "Best Practices befolgen ").

Vorzugsweise möchte ich das verschlüsselte Passwort in der Datenbank der Anwendung speichern.

Ich habe stundenlang Stunden damit verbracht, Fragen zu stackoverflow durchzulesen, aber ich kann keinen Konsens erkennen (wie es für Anmeldedaten für Benutzerkonten ist). Ich finde das überraschend, da ich davon ausgehe, dass grundsätzlich jeder Entwickler früher oder später mit diesem Problem konfrontiert wird.

Es müssen einige Best Practices zu folgen, einige etablierte Art und Weise zu gehen, aber ich habe es noch nicht gefunden.

Bitte weisen Sie mich auf Ressourcen auf SO/das Web, die erklären, wie Sie dieses Problem angehen. Wenn überhaupt möglich, von einem Spezialisten auf dem Gebiet geschrieben.

Einige SO Fragen, die ich geschaut haben:

Antwort

1

Es wäre gut, wenn Sie weitere Informationen über das Betriebssystem und die Programmiersprache zur Verfügung gestellt haben würden .. .

Jedoch hier einige allgemeine Hinweise:

Das wichtigste, was Sie wissen müssen, ist: Wenn Ihre Anwendung in der Lage ist, es zu entschlüsseln ohne Benutzerinteraktion (z. ein Passwort des Benutzers oder ein Hardware-Token) kann jeder Angreifer das tun. Alle Maßnahmen, die Sie implementieren, erhöhen nur die Komplexität der Erlangung dieses Kennworts.

Natürlich sollten Sie die Messlatte so hoch wie möglich anheben. Für Windows ist die DPAPI Ihr Freund. Sie können einige Informationen finden, wie Sie es hier zum Beispiel verwenden: http://www.c-sharpcorner.com/UploadFile/mosessaur/dpapiprotecteddataclass01052006142332PM/dpapiprotecteddataclass.aspx mit C# (ich weiß nicht, welche Umgebung Sie verwenden).

Sie können auch Ihre eigene Konfiguration implementieren und sie mit einem RSA verschlüsseln, dessen Schlüssel im lokalen Schlüsselcontainer gespeichert ist - siehe http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider%28v=vs.100%29.aspx.

Vielleicht können andere Leute Ihnen mit anderen Betriebssystemen helfen, aber das Konzept wird das gleiche sein.

Was möglicherweise auch möglich ist, ist eine Art von SSO-Authentifizierung wie Kerberos oder NTLM oder ..., aber das bedeutet Änderungen auf dem Mail-Server.