2009-08-06 8 views
18

Desidero personalizzare i collegamenti di "annullamento dell'iscrizione" nelle nostre newsletter via email in modo che rimuovano il destinatario con un solo clic. In questo momento puntano semplicemente a una pagina generica in cui l'utente deve inserire il proprio indirizzo e-mail e selezionare la newsletter da cui si desidera annullare l'iscrizione.Come aggiungere la funzionalità di annullamento della sottoscrizione con un clic per inviare e-mail alle newsletter?

Sembra che questo dovrebbe essere piuttosto semplice, cioè basta includere l'indirizzo email e l'id della newsletter come parametri url. Ma quando ho guardato gli esempi dalle liste a cui mi sono iscritto, molti non includono un indirizzo riconoscibile e la maggior parte sembra che utilizzi ciò che sembra guid e/o valori hash nei parametri. Da ciò, immagino che dovrei fare l'hashing o altrimenti codificare alcune informazioni per prevenire l'abuso dannoso del modulo di annullamento dell'iscrizione.

Quindi la mia domanda riguarda davvero le migliori pratiche e non reinventare la ruota. Esiste un modo standard per gestire questo tipo di funzionalità? Più specificamente, ci sono dei motivi per non includere l'indirizzo email del destinatario come parte dell'URL? Questo sembra abbastanza semplice da sembrare che sto trascurando qualcosa.

+0

Dal momento che non in realtà non è una vera risposta, mi limiterò a commentare: Si può' È davvero un hash a meno che non si disponga di una tabella di ricerca per l'hash per l'id utente. Quello che faccio è crittografare l'id utente, in modo che quando lo riavuto, posso decrittografarlo e annullare l'iscrizione dell'utente. – ConsultUtah

risposta

24

è possibile codificare un URL in questo modo:

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

Dove <signature> è qualcosa di simile HMAC(secretkey, "<encoded-email>/<expiration>"). L'e-mail codificata può essere solo una codifica dell'URL dell'email, oppure può essere una versione dell'e-mail effettivamente crittografata (AES + CBC + Base64 o simile). L'utilizzo della crittografia completa sembrerebbe tuttavia poco utile, poiché la persona che riceve questo messaggio ha comunque il proprio indirizzo di posta elettronica.

Questo schema di firma ha il vantaggio di non richiedere alcuna archiviazione di database, rimanendo al sicuro da tentativi malevoli di annullare l'iscrizione di qualcuno.

In alternativa (o in aggiunta a quanto sopra), è possibile inviare una mail di conferma per confermare l'intenzione dell'utente. Questo evita problemi se l'utente inoltra l'e-mail.

+0

Quindi, se ho capito, stai sostanzialmente dicendo di includere indirizzo email e un hash di indirizzo email + tasto segreto nel link di annullamento dell'iscrizione; quindi la mia pagina di disiscrizione riprenderà indirizzo email + secretkey e si assicurerà che corrisponda al valore dell'hash passato alla pagina. E questo impedisce l'abuso perché il valore secretkey esiste solo sul nostro server. Questo ha senso fino ad ora, ma qual è lo scopo di ? – Matt

+0

@Matt, la scadenza è garantire che questi URL non debbano rimanere segreti per sempre e un giorno. :) – bdonlan

+0

@bdonlan, non sono sicuro di cosa intendi per "URL segreti"; stai solo dicendo che la firma dovrebbe scadere in modo efficace in modo da poter cambiare periodicamente la chiave segreta? O è qualcosa che ha a che fare con REST e la struttura del tuo URL di esempio. Siamo old-school, quindi il mio url effettivo sarà più simile a http://myserver.com/unsub.aspx?addr=encoded-email&sig=signature-val, se questo fa la differenza. – Matt

3

Se il software della tua mailing list utilizza le best practice della vecchia scuola, dovrebbe esserci un indirizzo email di "cancellazione": l'indirizzo email che desideri cancellare dall'iscrizione (eventualmente con una riga dell'oggetto fissa) generalmente lo fa (insieme con l'invio di una e-mail di conferma). In tal caso, l'aggiunta di un link "mailto" correttamente formattato dovrebbe fare il trucco.

+0

Mi piace questo approccio, ma mi sto occupando di una base di codice e di un'architettura esistenti che rendono più facile il percorso basato sul web. – Matt

2

Due motivi per cui non si dispone di un indirizzo di posta elettronica in chiaro nella query l'URL è che non si desidera che utenti malintenzionati annullino l'iscrizione dei clienti dalla propria mailing list.

Il secondo, che probabilmente interesserebbe solo le società che inviano milioni di e-mail, è rendere più difficile per gli spammer "annusare" gli indirizzi di posta elettronica originali.

1

Non è sicuro inserire gli indirizzi di posta elettronica in una newsletter. Non sono sicuro del tuo, ma molte newsletter sono finite in qualche archivio sul web. Esistono bot spam appositamente progettati per raccogliere gli indirizzi dagli archivi delle mailing list.

L'email è una tecnologia più sicura per questo. Imposta un account di posta per annullare l'iscrizione e ottenere l'indirizzo email dalle intestazioni della posta. Se si utilizza un qualsiasi software di mailing list, è necessario gestirlo già.

-4

Fornisco ad ogni e-mail un ID, quindi cerco l'ID e-mail quando si fa clic su annulla iscrizione.

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

E poi disdire l'indirizzo e-mail che ho inviato 1234 per.

+3

Chiunque legga questo, NON segue questo consiglio. Non solo il suo consiglio non si adatta bene a nessun sistema di mailing, ma non è sicuro. Ha un pattern facile da distinguere senza alcuna verifica per l'autenticità dell'utente che detiene l'email.Se non si desidera un sovraccarico e un sistema semplice ma sicuro per implementare il sistema, osservare la risposta accettata. – Bill

+0

Qualcuno potrebbe creare uno script con arricciatura e annullare l'iscrizione a tutti gli utenti. Stai attento con questo approccio. Utilizza un token univoco per ciascun utente o falle riempire la posta elettronica con qualche altra verifica. –

0

Ho usato un metodo in qualche modo semplice in un'applicazione web ma non sono sicuro se sia abbastanza efficiente e sicuro per gli scopi di altre applicazioni web.

Nella mia app quando l'utente fa clic sul collegamento di annullamento dell'iscrizione, li inoltro a una pagina sul mio server con una stringa di query che è una combinazione di indirizzo e-mail dell'utente e il suo ID univoco nel mio DB (entrambi crittografati preferibilmente).

Poi nella funzione di caricamento della pagina della mia pagina, prima ho decrypt il Email address, e poi verificare se l'indirizzo e-mail esiste nel mio DB e quindi se la risposta è vero, ho verificare se il ID e la Email address sono correlati e alla fine rimuovo l'utente secondo altri criteri.

Penso che farebbe il lavoro senza alcuna immissione di dati in più per il DB.

Ora sto cercando un modo per scoprire se la persona che ha fatto clic sul collegamento è la prima persona a cui ho inviato l'e-mail o l'e-mail è stata inoltrata a lui/lei. In modo che nessuno all'infuori del vero utente possa (almeno facilmente) cancellarlo!

[Chiedendo una domanda di sicurezza prima di finalizzare il processo di annullamento della sottoscrizione è una cosa che ho pensato finora]

Problemi correlati