Каков наилучший способ использовать ссылку для отказа от подписки на вашу рассылку новостей?

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

  •  21-08-2019
  •  | 
  •  

Вопрос

Я думаю, что я создаю код деактивации, добавляя его в ссылку для отмены подписки вместе с идентификатором пользователя.Затем, когда получатель моей рассылки нажимает на ссылку, я могу посмотреть его идентификатор пользователя и посмотреть, совпадает ли код деактивации.

Похоже ли это на лучший способ?

Каковы какие-то другие способы?

Это было полезно?

Решение

Вы могли бы просто использовать алгоритм хеширования для защиты идентификатора пользователя (чтобы никто не мог отменить регистрацию всей вашей базы данных с помощью неприятного цикла).

В итоге вы получите два параметра :Идентификатор пользователя и хэш.

Преимущество заключается в том, что вам не нужно будет сохранять какое-либо соответствие между кодом деактивации и идентификатором пользователя.

Другие советы

С точки зрения конечного пользователя, отмена подписки в один клик - это превосходно.

Однако использование хэша (id + secret) небезопасно, потому что умный злоумышленник может очень быстро "взломать" секрет, а затем отказаться от подписки на каждого пользователя в вашей базе данных, просто увеличив идентификатор.

Гораздо безопаснее сохранять идентификатор "полусекретным" на сервере и использовать адрес электронной почты для поиска пользователя при отказе от подписки.Таким образом, для успешной отмены подписки требуется сопоставление адреса электронной почты с правильным идентификатором.Вы можете сделать это еще более безопасным, сохранив действительно секретный ключ для каждого пользователя и используя его вместо идентификатора.Это особенно необходимо, если опубликованы пары email + ID.

Так, например, ваша ссылка для отказа от подписки будет выглядеть следующим образом:

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

А серверная функция для генерации $hash в PHP выглядела бы примерно так:

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

Затем, чтобы завершить отказ от подписки, вы свяжетесь с пользователем по электронной почте и подтвердите

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

С точки зрения пользователя, не требуйте, чтобы пользователь вводил адрес электронной почты, чтобы отказаться от подписки.Подход, при котором вся информация встроена в ссылку (такую, как вы описываете), намного лучше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top