Como implementar um sistema de cancelamento de assinatura de email para um site com muitos tipos de emails?

5

Estou trabalhando em um site que apresenta muitos tipos diferentes de e-mails. Os usuários têm contas e, quando conectados, têm acesso a uma página de configuração que podem ser usadas para personalizar os tipos de e-mail que recebem.

No entanto, gostaria de também fornecer aos usuários uma maneira fácil de cancelar a inscrição diretamente nos e-mails que recebem.

Analisei lista de cabeçalhos de cancelamento de inscrição , além de criar algum tipo de link de um clique que cancelaria a inscrição de um usuário esse tipo de email sem exigir login ou ação adicional. O mais tarde provavelmente exigiria que eu quebrasse as convenções e fizesse alterações no banco de dados em resposta a um GET no link.

No entanto, estou incorreto ao pensar que qualquer um deles exigiria que eu gerasse e armazenasse permanentemente um identificador exclusivo no meu banco de dados para cada e-mail que eu enviar, o que complicaria muito a entrega de e-mail? Sem isso, não sei como conseguir identificar um usuário e um tipo de email para alterar suas preferências de email, e esse identificador precisaria ser armazenado para sempre, já que um usuário poderia ter um email em suas caixa de entrada por um longo tempo antes de decidirem agir.

Alternativamente, eu estava pensando em ter uma página sem login para gerenciar as preferências de e-mail. Em contraste com o acima, onde eu precisaria de um desses identificadores para cada e-mail, isso precisaria apenas de um identificador por usuário, sem geração ou outra ação necessária no envio de um e-mail.

Todos eles geram problemas de segurança e podem ser usados por pessoas para adulterar as preferências de e-mail de outras pessoas. Isso pode ser atenuado de alguma forma, garantindo que o identificador seja realmente difícil de adivinhar.

Para a abordagem de identificador uma vez por usuário, eu estava pensando em gerar o identificador passando o ID de um usuário por meio de algum tipo de algoritmo de criptografia. Essa abordagem é boa? Para os identificadores por e-mail, talvez eu possa usar o ID de um usuário anexado à hora.

No entanto, mesmo isso não eliminaria totalmente o problema, pois isso seria apenas segurança através da obscuridade, e qualquer um com a URL poderia adulterar, e no final a defesa principal teria que ser que a maioria das pessoas não é tão entediado de adulterar as preferências de e-mail de outras pessoas.

Existem outras alternativas que eu perdi ou problemas ou soluções com as quais alguém possa fornecer informações? Quais são as melhores práticas nesta área?

Editar: Aqui é a alternativa que senti falta de alguém que venha depois disso. A maneira inteligente de fazer isso é incluir no link de cancelamento uma assinatura criptográfica do usuário a ser descadastrado e o que será cancelado. Nada precisa ser armazenado no banco de dados, além de estar em segurança com as soluções que eu estava considerando.

    
por Mike Liu 03.07.2012 / 17:13
fonte

1 resposta

4

Por que você precisa armazenar um identificador exclusivo para cada e-mail enviado? Você só precisa de um identificador exclusivo para cada usuário, pois as configurações certamente seriam específicas do usuário.

Normalmente, as configurações de inscrição por e-mail não seriam consideradas de alto risco ou de alta segurança. Afinal, elas podem simplesmente se inscrever novamente se quiserem o e-mail. Eu iria criptografar o id do usuário (e talvez o endereço de e-mail deles / delas ou algum outro sal) dar a cada usuário uma única tecla de cancelamento de inscrição que é adicionada em um link no rodapé de cada e-mail.

Armazenar uma chave exclusiva por usuário em um banco de dados não deve preocupá-lo. É provável que, se você tiver recursos para enviar correspondências em massa regularmente, tenha os recursos para armazenar uma chave de 32 caracteres.

    
por 03.07.2012 / 17:20
fonte

Tags