2009-08-06 4 views
18

전자 메일 뉴스 레터의 "수신 거부"링크를 사용자 지정하여 한 번의 클릭으로받는 사람을 제거하고 싶습니다. 지금 그들은 단지 사용자가 자신의 이메일 주소를 입력하고 그들이 탈퇴하고 싶은 뉴스 레터를 선택해야만하는 일반적인 페이지를 가리키고 있습니다.전자 메일 뉴스 레터에 원 클릭 구독 취소 기능을 추가하는 방법은 무엇입니까?

이메일 주소와 뉴스 레터 ID를 URL 매개 변수로 포함시켜야합니다. 그러나 내가 구독하는 목록에서 예제를 살펴보면 많은 사람들이 인식 가능한 주소를 포함하지 않고 대부분 매개 변수에서 guid 및/또는 해시 값처럼 보이는 것을 사용하는 것처럼 보입니다. 그로부터, 나는 구독 취소 양식의 악의적 인 남용을 막기 위해 일부 정보를 해시하거나 그렇지 않으면 인코딩해야한다고 생각합니다.

내 질문은 실제로 모범 사례에 관한 것이므로 바퀴를 다시 발명하지는 않습니다. 이런 종류의 기능을 처리하는 표준 방법이 있습니까? 더 구체적으로, 수신자의 이메일 주소를 URL의 일부로 포함하지 않는 이유가 있습니까? 이것은 마치 내가 간과하는 것처럼 느껴질만큼 단순 해 보인다.

+0

이 때문에 아닙니다 진짜 대답 [수신 거부 과정을 마무리하기 전에 보안 질문에 대한 요구가 지금까지 생각 한 한 가지입니다, 난 그냥 언급합니다 : 그것은 수 ' 사용자 ID에 해시를위한 조회 테이블이 없으면 실제로는 해시가 아닙니다. 내가하는 일은 사용자 아이디를 암호화하여 다시 가져올 때 암호를 해독하고 사용자를 탈퇴 할 수 있도록하는 것입니다. – ConsultUtah

답변

24

은 당신과 같이 URL을 인코딩 할 수 있습니다 : <signature>HMAC(secretkey, "<encoded-email>/<expiration>") 같은 일이

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

입니다. 인코딩 된 이메일은 이메일의 URL 인코딩 일 수도 있고 실제로 암호화 된 이메일 (AES + CBC + Base64 또는 유사한 버전) 일 수도 있습니다. 전체 암호화를 사용하는 것은 거의 사용하지 않는 것처럼 보일 것입니다 - 이것을받는 사람은 어쨌든 자신의 이메일 주소를 가지고 있기 때문에.

이 서명 구성표에는 누군가를 해지하려는 악의적 인 시도로부터 안전하면서 데이터베이스 저장소가 필요하지 않은 이점이 있습니다.

또는 (위 내용 이외에) 사용자의 의도를 확인하기 위해 확인 메일을 보낼 수 있습니다. 이렇게하면 사용자가 전자 메일을 전달할 때 문제가 발생하지 않습니다.

+0

그래서 이해한다면 기본적으로 emailaddress와 emailaddress + secretkey의 해시를 구독 취소 링크에 포함시키려는 것입니다. 내 구독 취소 웹 페이지가 emailaddress + secretkey를 다시 해치하고 페이지에 전달 된 해쉬 값과 일치하는지 확인하십시오. 그리고 이것은 secretkey 값이 우리 서버에만 존재하기 때문에 남용을 방지합니다. 지금까지 의미가 있지만, 의 목적은 무엇입니까? – Matt

+0

@Matt, 만료는 이러한 URL이 영원히 비밀로 유지 될 필요가 없음을 보장하는 것입니다. :) – bdonlan

+0

@bdonlan, 나는 당신이 "비밀 URL"에 의해 무슨 뜻인지 모르겠다; 서명을 효과적으로 만료시켜 주기적으로 비밀 키를 변경할 수 있다고 말하는 것입니까? 아니면 REST와 샘플 URL의 구조와 관련이있다. 우리는 구식입니다. 따라서 실제 URL은 http://myserver.com/unsub.aspx?addr=encoded-email&sig=signature-val처럼 보일 것입니다. – Matt

3

메일 링리스트 소프트웨어가 구식 모범 사례를 사용하는 경우 '구독 취소'이메일 주소가 있어야합니다. 구독 취소하려는 주소 (해당 제목이있는 경우도 있음)에서 해당 주소로 이메일을 보내는 것이 일반적으로 트릭입니다 확인 이메일을 보내는 것과 함께). 이 경우 올바르게 형식화 된 'mailto'링크를 추가하면 트릭을 수행해야합니다.

+0

저는이 접근 방식을 좋아하지만 웹 기반 경로를 쉽게 이동시킬 수있는 기존 코드 기반과 아키텍처를 다루고 있습니다. – Matt

2

URL의 쿼리에 일반 텍스트 전자 메일 주소가없는 두 가지 이유는 악의적 인 사용자가 귀하의 메일 링리스트에서 고객의 가입을 취소하지 않게하려는 것입니다.

수백만 개의 전자 메일을 보내는 회사에만 영향을 미치는 두 번째 항목은 스팸 발송자가 정품 전자 메일 주소를 '킁킁'거리게하는 것입니다.

1

이메일 주소를 뉴스 레터에 삽입하는 것은 안전하지 않습니다. 너의 것에 대해서는 확신하지 못했지만 많은 뉴스 레터는 웹상의 일부 아카이브에서 끝났습니다. 메일 링리스트 아카이브에서 주소를 수집하도록 특별히 설계된 스팸 보트가 있습니다.

이메일은이를 위해보다 안전한 기술입니다. 수신 거부를위한 메일 계정을 설정하고 메일 헤더에서 이메일 주소를 가져옵니다. 메일 링리스트 소프트웨어를 사용한다면 이미 처리해야합니다.

-4

각 이메일에 ID를 보내고 수신 거부를 클릭하면 이메일 ID를 조회합니다.

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

그리고 그때가 1234 보낸 전자 메일 주소를 취소.

+3

누구나이 것을 읽은 사람은이 조언을 따르지 마십시오. 그의 조언은 메일 링 시스템에서 잘 확장되지 않을뿐만 아니라 안전하지도 않습니다. 그는 전자 메일을 보유한 사용자의 진위 여부를 확인하지 않고도 패턴을 쉽게 식별 할 수 있습니다.오버 헤드를 없애기 쉽고 안전하면서도 수용 할 수있는 답을 시스템에서 구현할 수 있다면 충분합니다. – Bill

+0

누군가가 말아서 스크립트를 만들고 모든 사용자의 가입을 취소 할 수 있습니다. 그 접근법에주의를 기울이십시오. 각 사용자마다 고유 한 토큰을 사용하거나 다른 인증을 통해 이메일을 작성하십시오. –

0

웹 응용 프로그램에서 어떻게 든 간단한 방법을 사용했지만 다른 웹 응용 프로그램의 목적에 비해 효율적이고 안전한지 확실하지 않습니다.

내 앱에서 사용자가 수신 거부 링크를 클릭하면 사용자의 이메일 주소와 고유 ID가 조합 된 검색어 문자열 (내 서재)을 내 서버의 페이지로 전달합니다 (모두 바람직하게는 암호화 됨).

그런 다음 내 페이지의 페이지로드 기능에 먼저 나는 Email addressdecrypt 다음 나는 이메일 주소가 내 DB에 존재 대답이 TRUE이면, 내가 확인 있는지 확인합니다 경우 IDEmail address 관련이 있으며 마지막으로 다른 기준에 따라 사용자를 삭제합니다.

DB에 대한 추가 데이터 입력없이 작업 할 것이라고 생각합니다.

이제 링크를 클릭 한 사람이 이메일을 보내거나 이메일이 그/그녀에게 전달 된 사람인지 확인하는 방법을 찾고 있습니다. 그래서 실제 사용자 이외의 다른 사람이 (적어도 쉽게) 그/그녀를 구독 취소 할 수 없도록하십시오!

정말

관련 문제