Từ góc độ người dùng cuối, việc hủy đăng ký một lần nhấp là tuyệt vời.
Tuy nhiên, việc sử dụng hàm băm (id + secret) không an toàn vì kẻ tấn công thông minh có thể nhanh chóng "bạo lực", sau đó tiến hành hủy đăng ký mọi người dùng trong DB của bạn chỉ bằng cách tăng ID.
Sẽ an toàn hơn nhiều nếu giữ ID "bán bí mật" trên máy chủ và sử dụng địa chỉ email để tra cứu người dùng khi hủy đăng ký. Bằng cách này, việc hủy đăng ký thành công yêu cầu ghép nối địa chỉ email với ID chính xác. Bạn có thể làm điều này an toàn hơn bằng cách lưu khóa bí mật thực sự cho mỗi người dùng và sử dụng khóa đó thay vì ID. Điều này đặc biệt cần thiết nếu cặp email + ID được xuất bản.
Vì vậy, ví dụ, liên kết ngừng đăng ký của bạn sẽ trông như thế này:
http://mydomain.com/unsubscribe?email={$email}&hash={$hash}
Và một chức năng phía máy chủ để tạo ra $ băm sẽ trông như thế này trong PHP:
<?php
function unsubscribeHash($id, $email) {
$hashSecret = 'Fz!Fx~36N66>io3B-vlPDshdRxos8JjCd4+Ld-s2^ca{19Q/5u';
return sha1($id . $email . $hashSecret);
}
?>
Sau đó, để hoàn thành việc hủy đăng ký, bạn sẽ tra cứu người dùng bằng email và xác minh
$_GET['hash'] == unsubscribeHash($user_id, $_GET['email'])
Hãy để tôi nhận được điều này ... thông số userID trong trường hợp này sẽ được băm với thông số băm. Vì vậy, các params là userID và hash, và sau đó hash (hashedUserID, hash) = userID .... đúng không? – Tony
Tôi nghĩ anh ấy có nghĩa là url =/unsub? UserID = x & hash = $ hash (x + secret), nơi bí mật là thứ bạn không tiết lộ. –
Sau đó, tôi phải giữ bí mật trong cơ sở dữ liệu mà về cơ bản sẽ là mã hủy kích hoạt. Vậy lợi thế là gì? – Tony