Autentificando usuario en el mismo subdominio usando cookies

1

Tenemos pocos sitios web en producción, como site1.dom1.com , site2.dom1.com , site3.dom1.com , que son Sólo réplicas trabajando en diferentes servidores.

Ahora queremos extender alguna aplicación en otro servidor, digamos app.dom1.com (Nota: no tengo acceso a las sesiones almacenadas en sitio1, sitio2 y sitio2) que requerirían autenticación ( Si el usuario ha iniciado sesión en cualquiera de site1 / site2 / site3), él / ella debería poder acceder a app.dom1.com

Ahora no queremos que la aplicación 1 interactúe con ninguno de los otros sitios.

Hemos pensado en generar cookies firmadas desde site1, site2 y site3 que podemos descifrar en la aplicación usando la misma clave secreta (que se usa para generar la firma) y buscar frases en particular y una marca de tiempo válida.

Ahora, ¿hasta qué punto es seguro este método? ¿Con qué frecuencia debo cambiar mi clave secreta, y es una buena forma de autenticación? Si es vulnerable, ¿cómo?

    
pregunta dnit13 26.02.2016 - 11:30
fuente

3 respuestas

3

Puede generar un token de sesión que sea puramente del lado del cliente utilizando Fichas web JSON .

El secret se puede compartir entre los subdominios que autentican y su aplicación. El secreto se usa para generar un HMAC sobre las reclamaciones en el token; tenga en cuenta que no es necesario que estén encriptadas a menos que desee ocultar los datos al usuario. El HMAC evita la manipulación de parámetros porque el usuario final no conoce el secreto. para regenerar el HMAC.

Tenga en cuenta que compartir cookies en diferentes subdominios puede ser inseguro a menos que confíe completamente en todos los sitios que se ejecutan en un subdominio. Esto se debe a que la Política sobre el mismo origen para las cookies es laxa y no considera un subdominio o protocolo diferente como un origen diferente . Este mismo "defecto" es lo que le permite compartir la autenticación, sin embargo, esto podría no ser adecuado para usted si no controla todos los sitios o si se aplica la misma seguridad a cada sitio (una debilidad en uno puede socavar la seguridad de todos) ). Las posibles vulnerabilidades incluyen la fijación de la sesión y el secuestro de la sesión en caso de que existan vulnerabilidades en cualquiera de los sitios del dominio principal (incluso XSS o CSRF).

Si esto es un problema, use OpenID o OAuth en lugar de este método.

También es una buena práctica establecer la marca de seguridad en las cookies de autenticación y usar HSTS para proteger las cookies de mecanismos de transporte inseguros (es decir, HTTP simple).

También tenga en cuenta que los JWT tienen las siguientes debilidades:

  • No pueden ser revocados del lado del servidor porque existen puramente del lado del cliente.
  • Todo lo que puede hacer una función de cierre de sesión es eliminar la cookie, no puede evitar que un atacante que haya capturado una cookie continúe usándola para secuestrar una sesión.
  • Cualquier cambio de contraseña no cerrará las sesiones existentes para ese usuario, lo que aumentará la exposición en caso de violación de la contraseña.
respondido por el SilverlightFox 29.02.2016 - 11:47
fuente
2

Hay un antiguo axioma en la rama de Seguridad "No enrolle la suya propia ", ya que a menudo es mucho más fácil introducir aperturas de seguridad que cerrarlas.

Siempre usaría un estándar de Internet como Oauth 2 para este tipo de configuraciones (compartir usuarios en varios sitios web), especialmente cuando no hay información directa. Se desea la interacción.

En cuanto a la seguridad de su propuesta actual. ni idea. Perdí casi toda la información para tomar una decisión informada sobre la seguridad de este sistema. y es poco probable que podamos hacer otra cosa que no sea dar algunos consejos para tener en cuenta.

    
respondido por el LvB 26.02.2016 - 11:47
fuente
0

La clave aquí es el mismo subdominio de dom1.com . Cuando esto es cierto, por lo general, tiene la opción de compartir la misma base de datos de autenticación y, de ser así, al iniciar sesión en cualquier lugar se escribirá una cookie que se puede usar en todos los lugares. El truco es asegurarse de configurar el dominio de cookies para que sea:

dom1.com
(or .dom1.com for very old browsers)

Ahora la cookie de autenticación se enviará automáticamente al visitar cualquiera de los sitios. No necesitará compartir sesiones para que esto funcione, solo la base de datos de autenticación. Cada sitio puede tener su propia base de datos independiente que maneja la lógica específica de ese sitio.

    
respondido por el TTT 26.02.2016 - 16:49
fuente

Lea otras preguntas en las etiquetas