zend-framework authentication forgot-password

¿Cómo generar una contraseña aleatoria o una URL temporal para restablecer la contraseña en Zend Framework?



zend-framework authentication (1)

Zend Framework no tiene una clase generadora de contraseñas. Aquí hay un artículo sobre cómo usar el módulo PEAR Text_Password para generar una contraseña: https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/howdoi/?p=118

Sin embargo, no es una buena práctica de seguridad enviar la contraseña en un simple correo electrónico. En su lugar, debe restablecer su cuenta para que puedan iniciar sesión temporalmente sin dar una contraseña (dado que una URL que expira los envía en el correo electrónico), y una vez que inicien sesión, solicite que actualicen su propia contraseña a algo que conocen. Luego, almacene el hash salado de su contraseña.

Aquí hay algunas sugerencias para hacer esto en Zend Framework:

  • Defina una tabla AccountReset con los campos: reset_id (clave principal del GUID), account_id (referencia a Accounts.account_id ) y expiration (timestamp).
  • Implemente una acción llamada AccountController::resetAction() , es decir, en el mismo controlador que usa para crear cuentas, iniciar sesión, cambiar contraseñas, etc.
  • Cuando un usuario elige restablecer su cuenta, inserte una nueva fila en una tabla AccountReset con un nuevo GUID, una referencia a la cuenta del usuario y una expiration 30 minutos más o menos en el futuro.
  • Envíe un correo electrónico a la dirección que figura en el archivo para ese usuario, incluida una URL en la que debe hacer clic: "https ... / account / reset / reset_id / < GUID > " (si es inteligente con las reglas de enrutamiento, puede acortarlo URL, pero mantenga el GUID en ella).
  • Cuando AccountController::resetAction() recibe la solicitud, busca su reset_id en la tabla AccountReset . Si ese GUID existe y la fecha de expiration no ha pasado, presente al usuario un formulario para cambiar su contraseña (sin necesidad de que esté autenticado e ingresado).
  • Si resetAction() recibe una solicitud sin GUID, o el GUID no existe en la base de datos, o esa fila ha pasado su expiration , esta acción puede presentar al usuario un botón para iniciar una nueva solicitud de restablecimiento, y enviar un correo electrónico con un nuevo GUID. ¡Recuerde hacer de este botón una solicitud POST!

Debido a que el GUID se comunica solo por correo electrónico a la dirección de ese usuario, nadie más puede obtener acceso para cambiar la contraseña. Incluso si el correo electrónico del usuario es interceptado, solo hay un tiempo limitado para que el GUID otorgue ese acceso.

Si quiere ser aún más cauteloso, puede anotar la dirección IP del cliente en la tabla AccountReset , y solicitar que se cambie la contraseña de un cliente con la misma dirección IP, dentro de esa ventana de 30 minutos.

Esto es solo improvisado, y no lo he implementado o evaluado para una seguridad adecuada. Si usted es responsable de implementar la seguridad, es su deber leer sobre cuestiones de seguridad. Un recurso bien considerado para la seguridad de PHP es http://phpsecurity.org/ .

Tengo un proceso de autenticación básico que usa Zend_Auth_Adapter_DbTable . Tengo acciones de inicio de sesión y de cierre de sesión en mi Controlador de autenticación. Ahora quiero crear una función para restablecer las contraseñas olvidadas generando automáticamente una contraseña, guardando la nueva contraseña y enviándoles un correo electrónico con la contraseña recién generada.

¿Cuál sería el mejor proceso para hacer esto? ¿Cómo debería generar una nueva contraseña? ¿Zend Framework tiene algo que haría esto más fácil?

También he escuchado sobre el envío de un correo electrónico con un enlace a una página de corto plazo que les permite establecer una nueva contraseña. ¿Cómo podría hacerse esto con Zend Framework?