С точки зрения конечного пользователя, отмена подписки одним щелчком - это отлично.
Однако использование хэша (id + secret) небезопасно, потому что умный злоумышленник может очень быстро «взломать» секрет, а затем перейти к отмене подписки каждого пользователя в вашей БД, просто увеличив идентификатор.
Гораздо безопаснее хранить идентификатор "полусекретно" на сервере и использовать адрес электронной почты для поиска пользователя при отписке. Таким образом, успешная отмена подписки требует сопряжения адреса электронной почты с правильным идентификатором. Вы можете сделать это еще более безопасным, сохранив по-настоящему секретный ключ для каждого пользователя и используя его вместо идентификатора. Это особенно необходимо, если опубликованы пары email + ID.
Так, например, ваша ссылка для отписки будет выглядеть так:
http://mydomain.com/unsubscribe?email={$email}&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'])