¿Cuál es la mejor manera de implementar un enlace para anular su boletín de noticias?

StackOverflow https://stackoverflow.com/questions/853877

  •  21-08-2019
  •  | 
  •  

Pregunta

Estoy pensando que puedo crear un código de desactivación puesto que en el enlace para anular junto con su identificador de usuario. Entonces, cuando un destinatario de mi boletín de noticias hace clic en el enlace, puedo mirar a su identificación de usuario y ver si coincide con el código de desactivación.

¿Suena esto como la mejor manera?

¿Cuáles son algunas otras maneras?

¿Fue útil?

Solución

Se podía usar un algoritmo hash para asegurar la identificación de usuario (para que nadie pueda anular el registro de toda su base de datos con un bucle desagradable).

Usted va a terminar con dos parametros: ID de usuario y hash.

La ventaja es que usted no tendrá que almacenar cualquier mapeo entre el código de desactivación y ID de usuario.

Otros consejos

Desde el punto de vista del usuario final, de un solo clic para darse de baja es excelente.

Sin embargo, el uso de hash (id + secreta) es insegura debido a que un atacante inteligente puede muy rápidamente "fuerza bruta" el secreto, a continuación, proceder a darse de baja todos los usuarios en su base de datos, simplemente mediante el incremento de la ID.

Es mucho más seguro para guardar el ID de "semi-secreta" en el servidor y utilizar la dirección de correo electrónico para buscar el usuario al darse de baja. De esta manera, un darse de baja con éxito requiere el emparejamiento de una dirección de correo electrónico con el codigo correcto. Puede hacer esto aún más segura por el ahorro de una clave secreta verdad para cada usuario y el uso que en lugar de la ID. Esto es especialmente necesario si se publican los pares de correo electrónico + ID.

Así, por ejemplo, el enlace de cancelación se vería así:

http://mydomain.com/unsubscribe?email={$email}&hash={$hash}

Y una función de servidor para generar $ picadillo se vería así en PHP:

<?php
function unsubscribeHash($id, $email) {
    $hashSecret = 'Fz!Fx~36N66>io3B-vlPDshdRxos8JjCd4+Ld-s2^ca{19Q/5u';
    return sha1($id . $email . $hashSecret);
}
?>

A continuación, para completar la cancelación de suscripción, se le buscar el usuario por correo electrónico, y verificar

$_GET['hash'] == unsubscribeHash($user_id, $_GET['email'])

Desde la perspectiva del usuario, no requieren que el usuario introduzca la dirección de correo electrónico para darse de baja. Un enfoque que tiene toda la información incrustada en el enlace (tales como describes) es mucho mejor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top