¿Cómo almacenas la contraseña? Muy cuidadosamente .
En particular, sugiero usar una arquitectura especial:
-
Configure una máquina separada, que existirá solo para almacenar las contraseñas de texto simple. Debe endurecerse y cerrarse lo más apretadamente posible. Debe limitar el número de administradores con acceso a este servidor. Y este servidor debe ser usado solo para este propósito. Llamemos a esto el "servidor de inicio de sesión".
-
El servidor de inicio de sesión debe exportar una API simple, con algunas funciones: (a) agregar un nuevo par de nombre de usuario / contraseña para algún sitio web al almacén de contraseñas, y devolver un identificador que lo identifique de manera única; (b) inicie sesión en el sitio de terceros utilizando un par de nombre de usuario / contraseña en particular (según lo especifique su identificador), emita una solicitud en particular y envíe la respuesta; (c) elimine un par de nombre de usuario / contraseña en particular (como lo identifica su manejador). Las contraseñas deben almacenarse en el servidor de inicio de sesión (no en una base de datos compartida).
-
Observe que no hay API para exportar un par de nombre de usuario / contraseña desde el almacén de contraseñas. Eso es a propósito. El servidor de inicio de sesión debe actuar como un Hotel California para las contraseñas: las contraseñas entran, pero nunca salen.
-
El servidor de inicio de sesión debe mantener registros detallados de todos los usos de sus contraseñas. También es posible que desee tener un límite de velocidad (por ejemplo, notificar a un administrador si la tasa de uso excede algún umbral). Y es posible que desee tener un poco de recolección de basura, de modo que si no se usa un nombre de usuario / contraseña dentro de los 90 días, lo elimina del almacén de contraseñas, para limitar la cantidad de contraseñas antiguas almacenadas (se le puede solicitar al usuario que recuerde) ingrese su nombre de usuario / contraseña la próxima vez que inicien sesión).
Esta arquitectura aísla el aspecto más crítico para la seguridad en una pieza separada, el servidor de inicio de sesión, y trata de mantener su funcionalidad lo más simple posible, para que pueda minimizar las posibilidades de vulnerabilidades de seguridad que podrían permitir el acceso a las contraseñas de los usuarios. .
En segundo lugar, sugiero que planee realizar un nivel adicional de revisión y prueba de código, dada la naturaleza crítica del servidor de inicio de sesión:
-
Haga que un segundo desarrollador revise todo el código del servidor de inicio de sesión para verificar que no contenga vulnerabilidades de seguridad.
-
Considere la posibilidad de contratar a alguien para que realice una revisión de pentest o de código de seguridad del servidor de inicio de sesión.
Incluso si toma todos estos pasos, todavía está sujeto a cierto riesgo. No hay bala de plata. Si el servidor de inicio de sesión es hackeado, todas las contraseñas de sus usuarios serán reveladas, lo cual es muy malo. Por lo tanto, sea lo más cuidadoso que pueda.