Cómo evitar la fuga de información del remitente durante el restablecimiento de la contraseña

5

La mayoría de los sistemas de restablecimiento de contraseñas implican enviar por correo electrónico al usuario un enlace único que le permite restablecer su contraseña. El token debe estar en la URL, ya que la mayoría de los clientes de correo electrónico no permiten que los correos electrónicos HTML realicen solicitudes POST, y pedirle al usuario que vuelva a escribir el token no es una experiencia aceptable. Sin embargo, esto pone el token en riesgo de fuga a través del encabezado del remitente.

Una posible solución para esto es evitar cualquier enlace externo en la página de restablecimiento de contraseña. Sin embargo, la mayoría de los sitios tienen una plantilla estándar que incluye enlaces externos (Facebook, Twitter, etc.) y no usar esta plantilla haría que la página pareciera extraña, y posiblemente los usuarios piensen que es un sitio de phishing.

Parece que los proveedores de navegadores son conscientes de este problema y algunos navegadores admiten la etiqueta de referencia meta, que puede ser se establece en "nunca" para que la URL nunca se filtre. Sin embargo, no todos los navegadores admiten esta etiqueta, por lo que no es una solución completa.

Entonces, ¿cómo crear un proceso de restablecimiento de contraseña que no tenga esta fuga?

    
pregunta paj28 15.12.2014 - 18:20
fuente

3 respuestas

3

La primera opción, que he visto utilizada en la práctica, es exactamente la que busca evitar. No incluya el token en la URL, pero brinde instrucciones al usuario para que lo copie y lo pegue fuera del correo electrónico y en un campo de formulario en la página que está vinculado.

Si esa no es una experiencia de usuario aceptable, sugeriría que el enlace que contiene el token sea un intersticial no interactivo en su lugar. El enlace enviará a un usuario a un recurso que quita el token de la URL, lo almacena en otro lugar (una cookie, el estado de la sesión, lo que sea más conveniente para usted) y luego 30x el usuario reenvía a la página real e interactiva de "olvidé la contraseña" que ya no tiene el token en la URL. Este método tiene una ventaja adicional sobre el método sugerido por varias otras respuestas (invalidar el token en la carga de la página) en que puede continuar usando el mismo token durante un período razonable hasta que se envíe el formulario, por lo tanto, si el usuario olvida o cierra el formulario. Página accidentalmente, simplemente pueden volver a ingresar al proceso desde su correo electrónico, en lugar de tener que comenzar de nuevo al principio con una nueva solicitud de contraseña olvidada.

    
respondido por el Xander 30.11.2016 - 21:37
fuente
3

¿Enlaces de fugas del navegador?

Aquí hay una captura de pantalla de mi configuración de Chrome:

Puedesverqueelnavegadorpuede:

  • consultaotroservicioparaversielenlaceeslegítimo
  • consultaotroserviciosielenlacetieneunerror

Noconozcolosdetalles,peroesosignificaquetambiéndebepreocuparseporlosserviciosquepierdeneltokenantesdequeelusuariopuedavisitarlapáginaoencasodequesuservidorwebestémalconfigurado.

Páginaderestablecimientodecontraseña

  • Sinodeseavincularlainformacióndelremitente,noincluyaelenlace.
  • Sideseamitigaralgunosefectos,incluyaun token CRSF fuerte en <input type="hidden"> ; de esa manera, incluso si el enlace está comprometido, aún necesitan un token CRSF válido.
    • ¿Por qué no también requieren una cookie?
  • Si, por casualidad, está utilizando github para alojar el código de su sitio web, no ponga su configuración (por ejemplo, el valor de SECRET_KEY utilizado para generar tokens) en línea.
respondido por el dnozay 15.12.2014 - 19:17
fuente
2

Dado que es un enlace de una sola vez, simplemente invalide el token original y genere uno nuevo en la página (conviértalo en un campo invisible en el formulario), luego POSTE con el formulario de restablecimiento de contraseña.

Además, no agregue ninguna información adicional que pueda filtrar la identidad del usuario en el enlace del correo electrónico. Un token SHA-256 es suficiente para completar el proceso de restablecimiento de contraseña.

    
respondido por el Alexander Lee 15.12.2014 - 18:53
fuente

Lea otras preguntas en las etiquetas