2009-08-06 19 views
18

Tôi muốn tùy chỉnh các liên kết "hủy đăng ký" trong các bản tin email của chúng tôi để họ xóa người nhận bằng một cú nhấp chuột. Ngay bây giờ, họ chỉ trỏ đến một trang chung nơi người dùng phải nhập địa chỉ email của họ và chọn bản tin mà từ đó họ muốn hủy đăng ký.Làm cách nào để thêm chức năng hủy đăng ký một cú nhấp chuột để gửi email các bản tin mới?

Có vẻ như điều này khá đơn giản, tức là chỉ bao gồm địa chỉ email và id bản tin làm thông số url. Nhưng khi tôi xem xét các ví dụ từ các danh sách tôi đăng ký, nhiều người không bao gồm một địa chỉ dễ nhận biết và hầu hết xuất hiện để sử dụng những gì trông giống như các giá trị guids và/hoặc băm trong các tham số. Từ đó, tôi đoán rằng tôi nên băm hoặc mã hóa một số thông tin để ngăn chặn sự lạm dụng độc hại của biểu mẫu hủy đăng ký.

Vì vậy, câu hỏi của tôi thực sự là về các phương pháp hay nhất và không phát minh lại bánh xe. Có cách nào tiêu chuẩn để xử lý loại chức năng này không? Cụ thể hơn, có lý do nào không bao gồm địa chỉ email của người nhận như một phần của url không? Điều này có vẻ đơn giản, đủ để cảm thấy như tôi đang nhìn cái gì đó.

+0

Vì có thực sự là không phải là một câu trả lời thật, tôi sẽ chỉ nhận xét: Nó có thể' t thực sự là một băm trừ khi bạn có một bảng tra cứu cho băm cho id người dùng. Những gì tôi làm là mã hóa id người dùng, để khi tôi lấy lại nó, tôi có thể giải mã nó và hủy đăng ký người dùng. – ConsultUtah

Trả lời

24

Bạn có thể mã hóa một URL như vậy:

http://yourserver.com/unsubscribe/<encoded-email>/<expiration>/<signature> 

đâu <signature> là một cái gì đó giống như HMAC(secretkey, "<encoded-email>/<expiration>"). Email được mã hóa chỉ có thể là mã hóa URL của email hoặc có thể là phiên bản thực sự được mã hóa (AES + CBC + Base64 hoặc tương tự) của email. Tuy nhiên, việc sử dụng mã hóa hoàn toàn có vẻ ít được sử dụng - vì người nhận thư này có địa chỉ email riêng của họ.

Lược đồ chữ ký này có lợi thế là không cần bất kỳ lưu trữ cơ sở dữ liệu nào, trong khi vẫn an toàn chống lại các nỗ lực độc hại để hủy đăng ký một người nào đó.

Cách khác (hoặc ngoài phần trên), bạn có thể gửi thư xác nhận để xác nhận ý định của người dùng. Điều này tránh được vấn đề nếu người dùng chuyển tiếp email.

+0

Vì vậy, nếu tôi hiểu, về cơ bản bạn đang nói để bao gồm địa chỉ email, và một băm của emailaddress + secretkey trong liên kết hủy đăng ký; sau đó trang web hủy đăng ký của tôi sẽ khôi phục emailaddress + secretkey và đảm bảo rằng nó khớp với giá trị băm được chuyển đến trang. Và điều này ngăn cản sự lạm dụng vì giá trị khóa bí mật chỉ tồn tại trên máy chủ của chúng tôi. Điều đó có ý nghĩa cho đến nay, nhưng mục đích của là gì? – Matt

+0

@Matt, hết hạn là để đảm bảo các url này không cần phải giữ bí mật mãi mãi và một ngày. :) – bdonlan

+0

@bdonlan, tôi không chắc chắn ý bạn là gì bởi "url bí mật"; bạn chỉ nói rằng chữ ký sẽ hết hiệu lực để tôi có thể thay đổi định kỳ khóa bí mật? Hoặc điều này liên quan đến REST và cấu trúc URL mẫu của bạn. Chúng tôi là trường học cũ, vì vậy url thực sự của tôi sẽ trông giống như http://myserver.com/unsub.aspx?addr=encoded-email&sig=signature-val, nếu điều đó tạo nên sự khác biệt. – Matt

3

Nếu phần mềm mailing list của bạn sử dụng thông lệ tốt nhất trường học cũ, cần có một địa chỉ email 'unsubscribe' - gửi email đến địa chỉ đó từ địa chỉ mà bạn muốn hủy bỏ đăng ký (có thể với một dòng tiêu đề cố định) thường hoạt động lừa (cùng với việc gửi email xác nhận). Trong trường hợp đó, việc thêm liên kết 'mailto' được định dạng đúng sẽ thực hiện thủ thuật.

+0

Tôi thích cách tiếp cận này, nhưng tôi đang xử lý một cơ sở mã và kiến ​​trúc hiện có giúp dễ dàng đi theo tuyến đường dựa trên web. – Matt

2

Hai lý do không có địa chỉ email văn bản thuần túy trong truy vấn trong URL là bạn không muốn người dùng độc hại hủy đăng ký khách hàng của bạn khỏi danh sách gửi thư của bạn.

Điều thứ hai có thể chỉ ảnh hưởng đến các công ty gửi hàng triệu email, là làm cho những người gửi spam khó khăn hơn khi 'đánh hơi' địa chỉ email chính hãng.

1

Không an toàn khi nhúng địa chỉ email vào bản tin. Không chắc chắn về bạn nhưng nhiều bản tin đã kết thúc trong một số lưu trữ trên web. Có những chương trình thư rác được thiết kế đặc biệt để thu thập địa chỉ từ lưu trữ danh sách gửi thư.

Email là công nghệ an toàn hơn cho việc này. Thiết lập tài khoản thư để hủy đăng ký và nhận địa chỉ Email từ tiêu đề thư. Nếu bạn sử dụng bất kỳ phần mềm danh sách gửi thư nào, nó sẽ xử lý điều này.

-4

Tôi cung cấp cho mỗi email tôi gửi ID, sau đó tra cứu ID email khi họ nhấp vào hủy đăng ký.

http://www.foo.com/unsubscribe.asp?ID=1234

Và sau đó bỏ đăng ký địa chỉ email tôi gửi 1234 để.

+3

Bất cứ ai đọc điều này, KHÔNG làm theo lời khuyên này. Lời khuyên của ông không chỉ mở rộng tốt trong bất kỳ hệ thống gửi thư nào, nhưng nó không an toàn. Anh ta có một mô hình dễ phân biệt và không xác minh tính xác thực của người dùng đang giữ email.Nếu bạn không muốn trên không và dễ dàng nhưng đủ an toàn để thực hiện hệ thống, hãy xem câu trả lời được chấp nhận. – Bill

+0

Ai đó có thể tạo một tập lệnh với curl và hủy đăng ký tất cả người dùng của bạn. Hãy cẩn thận với cách tiếp cận đó. Sử dụng mã thông báo duy nhất cho mỗi người dùng hoặc làm cho họ điền email của họ bằng một số xác minh khác. –

0

Tôi đã sử dụng một phương pháp đơn giản nào đó trong ứng dụng web nhưng tôi không chắc liệu phương pháp đó có hiệu quả và bảo đảm đủ cho các mục đích ứng dụng web khác không.

Trong ứng dụng của tôi khi người dùng nhấp vào liên kết hủy đăng ký, tôi chuyển tiếp họ tới một trang trên máy chủ của tôi bằng chuỗi truy vấn là sự kết hợp giữa địa chỉ email người dùng và id duy nhất trong số DB (cả hai được mã hóa tốt nhất).

Sau đó, trong trang chức năng tải của trang web của tôi, đầu tiên tôi decrypt các Email address, và sau đó tôi kiểm tra xem địa chỉ email tồn tại trong DB của tôi và sau đó nếu câu trả lời là TRUE, tôi kiểm tra nếu IDEmail address có liên quan và cuối cùng tôi xóa người dùng theo tiêu chí khác.

Tôi nghĩ rằng nó sẽ thực hiện công việc mà không cần nhập thêm dữ liệu nào vào DB.

Bây giờ, tôi đang tìm cách tìm hiểu xem người đã nhấp vào liên kết có phải là người đầu tiên tôi gửi email hoặc email đã được chuyển tiếp đến họ hay không. Vì vậy, không ai khác ngoài người dùng thực sự có thể (ít nhất là dễ dàng) bỏ đăng ký anh/cô ấy!

[Yêu cầu cho một câu hỏi bảo mật trước khi hoàn thiện quá trình hủy đăng ký là một trong những điều mà tôi đã nghĩ về cho đến nay]

Các vấn đề liên quan