Mi sitio tiene un sistema de suscripción de noticias. Cuando se actualiza un elemento, se envía un correo electrónico de notificación a todas las personas suscritas a ese elemento.
Puede cancelar / suscribirse a través de un formulario en la página de cada elemento.
Quería incluir un enlace directo para darse de baja en los correos electrónicos de notificación. Luego me di cuenta de que la gente podría cerrar sesión o ver el correo electrónico en una máquina diferente desde su inicio de sesión (no permitimos que los usuarios inicien sesión simultáneamente en diferentes máquinas), así que quería crear una función de cancelación de suscripción con un solo clic eso no requiere que alguien esté conectado.
Naturalmente, esto significaba un token (esperemos) único.
Mi solución de prueba es esta:
- cuando un usuario se suscribe a un elemento, se genera un token a través de sha512 en una cadena concatenada de varias cosas (nombre de usuario, fecha y hora, itemid, etc.)
- el enlace para cancelar la suscripción incluye la ID del elemento, el tipo de elemento y el token como parámetros GET
- si y solo si las tres cosas coinciden en una fila en la base de datos
user_subscriptions
, la fila se elimina, lo que termina la suscripción
Esto funciona, y sospecho que es adecuado para esta tarea no sensible a la seguridad de suscribirse y cancelar la suscripción a publicaciones de noticias.
Lo que me lleva a Security.SE es la pregunta más importante de ¿Qué tan seguro es un sistema de token para otras acciones?
sha512 produce un hash de 128 caracteres, además tendrías que identificar la ID y el tipo de acción que deseas realizar ...