5

Wygląda na to, że każda aplikacja, którą utworzę, musi być w stanie wysyłać sporadyczne wiadomości e-mail. Na przykład. e-maile o stanie. Na to pytanie załóżmy, że moja aplikacja jest narzędziem do tworzenia kopii zapasowych, zainstalowanym lokalnie na wielu klientach Windows, a każda instalacja musi wysyłać codzienne wiadomości statusowe. Może być zainstalowany na serwerze organizacji lub na komputerze prywatnym.Moje aplikacje muszą wysyłać e-maile, gdzie i jak mam przechowywać hasło SMTP?

Proszę użytkownika o podanie poświadczeń na konto e-mail, którego jest właścicielem (host STMP, port, nazwa użytkownika, hasło, adres pocztowy). Skopiowałem to podejście z aplikacji takich jak Atlassian Jira/Confluence lub JFrog Artifactory. Gdzie i jak przechowują hasła SMTP?

Moje bieżące zrozumienie jest następujące: Nie stosuje się tutaj metod Solting/Hashing, ponieważ muszę mieć możliwość pobrania hasła w postaci zwykłego tekstu, aby faktycznie wysłać e-maile. Nie chcę przechowywać haseł w zwykłym tekście, więc musi to być jakiś rodzaj szyfrowania/deszyfrowania (prawda?).

Mogę powiedzieć użytkownikowi, aby nie używał swojego głównego konta e-mail, ale aby użyć dodatkowego konta lub, jeszcze lepiej, skonfigurować specjalne konto e-mail, które ma być używane przez moją aplikację. Jeśli użytkownik jest administratorem organizacji, może być w stanie skonfigurować konto e-mail na swoim serwerze wymiany lub skonfigurować przekazywanie SMTP. Ale, znam mnie i znam moich prywatnych użytkowników, niektórzy z nich po prostu wykorzystają swoje główne konto e-mailowe, więc chcę zrobić wszystko, co w mojej mocy, aby ich dane uwierzytelniające były tak bezpieczne, jak to tylko możliwe (mam tu na myśli "przestrzeganie najlepszych praktyk ").

Preferibe chciałbym przechowywać zaszyfrowane hasło w bazie danych aplikacji.

Spędziłem wiele godzin czytając pytania na temat stackoverflow, ale nie widzę zgody (jak w przypadku danych logowania do konta użytkownika). Uważam to za zaskakujące, ponieważ prędzej czy później każdy deweloper napotka na ten problem.

Musi być kilka dobrych praktyk do naśladowania, jakiś ustalony sposób, aby to osiągnąć, ale jeszcze go nie znalazłem.

Proszę wskazać mi zasoby w SO/internecie, które wyjaśniają, jak rozwiązać ten problem. Jeśli to w ogóle możliwe, napisany przez jakiegoś specjalistę w tej dziedzinie.

Niektóre SO pytania Mam spojrzał na:

Odpowiedz

1

Byłoby dobrze, gdyby podałeś więcej szczegółów na temat systemu operacyjnego i języka programowania ..

Oto niektóre ogólne porady:

Najważniejszą rzeczą, którą musisz wiedzieć, to: Jeśli aplikacja może odszyfrować to bez interakcji użytkownika (np. hasło przez użytkownika lub token sprzętowy) każdy atakujący będzie mógł to zrobić. Wszystkie zastosowane działania zwiększą złożoność uzyskiwania tego hasła.

Oczywiście należy podnieść poprzeczkę tak wysoko, jak to możliwe. W systemie Windows DPAPI będzie Twoim przyjacielem. Możesz znaleźć informacje o tym, jak go używać na przykład tutaj: http://www.c-sharpcorner.com/UploadFile/mosessaur/dpapiprotecteddataclass01052006142332PM/dpapiprotecteddataclass.aspx z C# (nie wiem, którego środowiska używasz).

Można również zaimplementować własną konfigurację i zaszyfrować ją za pomocą klucza RSA za pomocą klucza zapisanego w lokalnym kontenerze kluczy - patrz http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider%28v=vs.100%29.aspx.

Być może niektóre osoby mogą pomóc w innych systemach operacyjnych, ale koncepcja będzie taka sama.

Możliwe jest również użycie pewnego rodzaju uwierzytelnienia SSO, takiego jak Kerberos lub NTLM lub ..., ale oznacza to modyfikacje na serwerze pocztowym.