Almacenar una contraseña para evitar la interacción del usuario

5

Estoy creando un servicio de Windows que envía un correo electrónico a un usuario. Utiliza una cuenta de Gmail para enviar el correo electrónico, por lo que necesita una contraseña para acceder a la cuenta. También debe hacerlo automáticamente, sin interacción del usuario. ¿Cómo almaceno de forma segura la contraseña para que la aplicación pueda autenticarse con Gmail?

Hasta ahora, las opciones que puedo pensar son:

  1. Codifique la contraseña
  2. Guarde la contraseña en un archivo de texto plano con permisos restringidos

Ninguno de los cuales es muy seguro en un entorno Windows.

    
pregunta Phil 16.12.2011 - 19:07
fuente

4 respuestas

6

Creo que el servidor SMTP de Google es compatible con OAuth, por lo que realmente no tiene que almacenar la contraseña. Eso requiere la interacción del usuario (una sola vez) para configurar, pero tendría que pedirle al usuario que se registre de todos modos, de modo que cuando lo haga, también puede establecer un enlace OAuth a Google. Obtenga más información en sitio de ayuda de Google .

    
respondido por el StasM 16.12.2011 - 20:01
fuente
5

Es probable que desee utilizar DPAPI para almacenar la contraseña de forma segura dentro de Windows. Eso le permitirá mantener la contraseña cifrada, y Windows administrará las claves por usted y se puede bloquear al usuario o a la aplicación. Por supuesto, un usuario con privilegios de administrador puede acceder a la clave. Para obtener más información: enlace

También podría hacer que sea un poco más difícil encontrar la ubicación de la contraseña con almacenamiento aislado: enlace . Dicho esto, el almacenamiento aislado NO es un mecanismo de seguridad.

    
respondido por el Steve 16.12.2011 - 20:13
fuente
1

Para asegurar la contraseña, necesita asegurar el acceso a los archivos. Esto significa que solo los usuarios de confianza pueden tener acceso físico al servidor (debe estar en una sala de servidores bloqueada) o acceso remoto (archivos compartidos, escritorio remoto, etc.).

Si va a distribuir la aplicación, la contraseña (y el nombre de usuario) deben almacenarse en un archivo de configuración para que otros usuarios puedan configurarlo para usar su propio usuario y contraseña. (Y también necesitan proteger su propio servidor).

    
respondido por el JGWeissman 16.12.2011 - 20:06
fuente
0

Diría que es porque es .NET, y la descompilación implica descargar ILSpy y pasar unos 30 segundos leyendo su fuente casi sin procesar (incluidos los nombres de variables) ... Probablemente ni siquiera me molestaría, por más que no sea enviar nada. solicita a un servidor que TÚ posees que haga la autenticación, cualquier persona que no sea perezosa puede descifrar la contraseña sin importar cuánto tiempo pierdas en cifrado pesado en archivos almacenados localmente.

Probablemente lo haría para que pueda cambiar el servidor SMTP, y me asegure de que si el software se redistribuye entregue el que tiene la configuración del servidor SMTP en blanco, y básicamente cancele la cuenta de GMail si no lo hacen. t.

Si quieres sentirte un poco más seguro, puedes ingresar algo simple, como una clave AES + la contraseña cifrada, y usarla como archivo de configuración, pero eso no detendrá a los programadores competentes. pero al menos no pasó días o semanas tratando de desarrollar algo demasiado complicado que todavía puedo descifrar en la misma cantidad de tiempo (ya que tengo que agregar su archivo .exe como recurso, ejecutar la llamada para extraer su config, y lea las variables en bruto en la memoria).

Aunque es mejor que solo lo bases64 para que no esté en bruto (porque es estúpido y fácil), porque como dije, cualquier cosa que hagas es bastante fácil de descifrar.

    
respondido por el StrangeWill 16.12.2011 - 19:39
fuente

Lea otras preguntas en las etiquetas