Cómo proteger la contraseña en el cliente de correo electrónico de código C #

Estoy construyendo un sitio web para la empresa de mi hermano. El elemento más importante del sitio web es la función de correo. Es importante que los visitantes puedan enviar correos electrónicos a mi hermano usando ese sistema. Así que usé este código:

message.From = new MailAddress("someemail@somedomain.com");
message.To.Add(new MailAddress("emailaddress"));
message.CC.Add(new MailAddress("emailaddress"));
SmtpClient client = new SmtpClient("smtp.live.com", 587);
client.EnableSsl = true;
client.Credentials = new System.Net.NetworkCredential("emailaddress","password");
client.Send(message);

El código funciona bien, pero hay un problema: necesito ingresar mi contraseña y no quiero hacerlo. ¿Hay alguna manera de usar algo como hash MD5 (o algún otro tipo de encriptación) u otra cosa para proteger mi contraseña?

preguntado el 10 de septiembre de 12 a las 22:09

2 Respuestas

SMTP (protocolo de correo electrónico subyacente) requiere que la contraseña se proporcione en texto sin formato.

Ya está asegurando el canal de comunicación, lo que debería evitar la interceptación de la contraseña de correo electrónico en el cable.

Puede colocar la propia contraseña en un elemento encriptado de web.config para protegerlo en reposo.

Finalmente, considere una cuenta usada , solamente para este propósito. Reenviar correo electrónico desde esa cuenta a la cuenta de tu hermano. Si la contraseña se ve comprometida, elimine la cuenta y cree una nueva cuenta de reenvío.

Respondido el 10 de Septiembre de 12 a las 22:09

Gracias por esta información, y sí, ya tenía en mente usar una cuenta que solo se usa para enviar correos electrónicos a mi hermano. - Max

@EricJ .NET 4 versión de NetworkCredential tiene un constructor que toma un SecureString para la contraseña: ¿está diciendo que esto no se puede usar con SMTPClient si requiere una contraseña de texto sin formato? (No lo he probado, solo me interesa) - Puente

@Bridge: NetworkCredential es para "credenciales en esquemas de autenticación basados ​​en contraseña, como básico, resumen, NTLM y Kerberos". No estoy seguro de si funciona con SMTPClient o no, pero al final del día, el texto sin formato pasará por el cable (con suerte, protegido por SSS), al igual que el texto sin formato finalmente pasará por el cable para la autenticación web básica ( que sé que admite NetworkCredential). SecureString proporciona el beneficio adicional de que la cadena no permanece en la memoria del sistema después de su uso, sino que se sobrescribe activamente. Eso puede ayudar a minimizar la exposición si el servidor es pirateado. - Eric J.

Detalles para el System.Net Los objetos de correo electrónico smtp se pueden configurar en app.config o web.config

http://msdn.microsoft.com/en-us/library/w355a94k(v=vs.90).aspx

SI establece su contraseña en el archivo de configuración, puede cifrar esa sección para evitar la lectura superficial de su contraseña. Pero, en última instancia, la contraseña debe proporcionarse como una cadena.

Respondido el 10 de Septiembre de 12 a las 22:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.