Как лучше всего создать ссылку для подписки на рассылку? - PullRequest
7 голосов
/ 12 мая 2009

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

Это звучит как лучший способ?

Какие есть еще способы?

Ответы [ 3 ]

9 голосов
/ 28 июня 2012

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

Однако использование хэша (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'])

8 голосов
/ 12 мая 2009

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

В итоге вы получите два параметра: userID и hash.

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

4 голосов
/ 12 мая 2009

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

...