Sì, la memorizzazione della password in testo normale in qualsiasi punto dell'applicazione non è sicura. Non farlo!
Invece, è necessario memorizzare la password criptata nel file App.config (o da qualche altra parte in un file di configurazione, machine.config per esempio):
Encrypting and Decrypting ApplicationConfigSections
In alternativa si potrebbe chiedere all'utente in fase di runtime le credenziali.
Se si desidera evitare di fornire esplicitamente una password, è possibile autenticarsi tramite l'autenticazione di Windows dell'utente attualmente connesso. Per questo è possibile utilizzare SmtpClient.UseDefaultCredentials
per l'invio della posta. Ovviamente questo funziona solo se SmtpServer riconosce le credenziali di Windows degli utenti.
Se vuoi essere al sicuro da attacchi di tipo man-in-the-middle e packet sniffing, è necessario utilizzare SSL per trasmettere i dati di autenticazione. Puoi farlo tramite enabling SSL in the configuration o semplicemente impostando tu stesso la proprietà: SmtpClient.EnableSsl
. (.NET> = 4.0)
È necessario crittografare la password in quanto qualsiasi stringa semplice verrà visualizzata facilmente utilizzando strumenti come Reflector. Vorrei chiedere a un utente o memorizzare una password crittografata in un file di tipo configurazione. –
Crea un ** account di servizio ** che può inviare e-mail (ma non fare molto altro) e crittografare le credenziali? – SpaceBison