Executando verificação de segurança...
1

Leonardo, eu fico muito feliz em ver sua preocupação com o projeto, é realmente muito legal isso e nunca podemos perder esse carinho 🤝

Minhas considerações:

  1. [email protected] é um email válido, assim como qualquer outro email com o caractere +.
  2. Eu, inclusive aqui no TabNews, fiz o meu cadastro utilizando um +algumacoisa por medida de segurança e sugiro você fazer isso em todos os sites que se cadastrar (cada site uma variação nova), pois com isso você tem uma combinação única entre email e senha para todos os serviços.
  3. Quem quiser abusar com cadastros, vai sempre conseguir fazer isso por outras vias, como por exemplo usando disposable emails. Esse serviço é um exemplo https://temp-mail.org/ tem outros que a cada refresh você ganha um email que varia caracteres antes e depois do @ e fica difícil de achar um padrão.
  4. Então uma medida seria primeiro usar listas de disposable emails, como por exemplo esse módulo: https://www.npmjs.com/package/disposable-email-domains
  5. Uma segunda medida seria usar rate-limiting por ip. No exemplo de criar uma conta você poderia barrar esse ip de criar outra conta por, por exemplo, 1 dia. Daí o atacante teria que se dar o trabalho de usar múltiplos ips.
  6. No fim do dia, é uma corrida de gato e rato que não termina, mas precisamos cuidar muito com estratégias que não irão barrar atacantes, mas que irão barrar pessoas que genuinamente querem usar um recurso.
Carregando publicação patrocinada...
3

Eu acredito que este assunto é um daqueles que sempre vai longe e quase sempre não chegamos a um consenso, pois como supracitado existe "N" maneiras de burlar a criação de um e-mail. Geralmente eu uso regexp para validar se pelo menos o formato é correto.

A confirmação de e-mail já seria algo para "validar", mas existe essa feature do +algo.

o regexp que eu utilizo é:

 /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2**,}))$/