2013-02-27 23 views
7

Sto provando a creare una semplice applicazione che invierà un'e-mail. Io uso le classi MailMessage e SmtpClient. SmpClient richiede un login e una password per funzionare.Invia email in modo sicuro

  • È sicuro compilare l'applicazione con login/password in una stringa semplice?
  • È possibile smontare questo e ottenere la password?
  • Come nasconderlo dal potenziale aggressore?
  • E 'possibile inviare e-mail senza utilizzare login/password?
+2

È 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. –

+1

Crea un ** account di servizio ** che può inviare e-mail (ma non fare molto altro) e crittografare le credenziali? – SpaceBison

risposta

6

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)

+0

Sembra che ho bisogno di leggere molto ora per capire questa cosa App.config. In Asp.net ho visto qualcosa di simile, ma in WinForms non lo vedo. Comunque lo farò di rosso. Ma quando SmtpClient invia un messaggio, è visibile la password per l'attaccante che usa lo sniffer di pacchetti? – zgnilec

+1

È possibile utilizzare SSL per inviare la posta, quindi la password non verrà inviata in testo normale e si è al sicuro dagli sniffer di pacchetti. – magnattic

+0

Come è utile memorizzare la password in una forma crittografata? Se è crittografato, l'app dovrà decrittografarlo, quindi la password per * that * dovrà essere non crittografata nel programma binario, ecc. –