Neste artigo, veremos como validar um e-mail em PHP de forma segura, impedindo que eles obtenham o token do nosso serviço de verificação de e-mail.
Nos exemplos, usaremos o serviço para validar e-mails do verificaremails.com, embora o mesmo sistema funcione para qualquer serviço de validação de e-mail.
Atualmente, há vários serviços que permitem que você valide e-mails.
As soluções baseadas em script, embora sejam uma primeira etapa, só permitem que você valide o e-mail por meio de regras de sintaxe ou executando verificações mais ou menos sofisticadas de domínio e registro MX.
Se precisar validar um e-mail de forma confiável, você terá de usar um serviço profissional de validação de e-mail. Além das verificações acima, os serviços profissionais realizam uma simulação completa da conexão ou verificam o e-mail em suas listas de spam trap para verificar o e-mail de forma confiável.
Como funciona a validação de e-mail em php
Quase todos os serviços funcionam da mesma maneira: por meio de uma API, podemos validar o e-mail em tempo real. Para isso, geralmente é feita uma chamada Curl, em que o serviço é chamado e o e-mail é transmitido junto com o token do serviço.
Você pode encontrar a documentação detalhada em ”
Documentação verificar e-mail“.
No caso do serviço verificaremails.com, a chamada PHP é:
$email = “[email protected]”;
$key = “your_api_key”;
$url = “https://app.verificaremails.com/api/verifyEmail?secret=”.$key.”&email=”.$email;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true );
$response = curl_exec($ch);
echo $response;
curl_close($ch);
Como você pode ver, a chamada é muito simples.
Se a validação for feita em nossos serviços de BackOffice, a “chave” ou o token para realizar a validação permanecerá em segredo durante todo o processo.
Podemos modificar nosso script para que, quando clicarmos em “enviar” em nosso formulário de registro, a validação do e-mail seja executada.
Esse mecanismo é eficaz e seguro; a única desvantagem é que a validação é feita depois que o usuário preenche o formulário.
A validação de e-mails via API em tempo real geralmente leva em média cerca de 2 segundos, embora seja uma verificação rápida, não é imediata.
Um aprimoramento desse método seria validar o e-mail enquanto o usuário preenche o restante dos campos do formulário.
Se detectarmos que o endereço é inválido, poderemos indicar isso no formulário sem precisar enviá-lo.
Melhorando a usabilidade do serviço e aumentando a conversão de registros.
Do ponto de vista técnico, só precisamos adicionar algumas linhas de JavaScript ao nosso código PHP.
Riscos da validação de um e-mail em PHP com Java Script
Embora a chamada acima seja muito simples de implementar, ela apresenta um risco.
Quero lembrar a você que, para validar o e-mail, fazemos uma chamada Curl, em que passamos para o serviço de validação de e-mail o e-mail a ser verificado e o token do serviço.
Se um usuário capturar esse token, ele poderá validar os e-mails.
Como validar um e-mail de forma segura com PHP e JavaScript
No verificaremails.com, desenvolvemos uma biblioteca para evitar esse risco.
Embora os exemplos de código que explicaremos sejam explicitamente para o Verificaremails, eles também podem funcionar com qualquer outro serviço.
A biblioteca usa 4 arquivos:
Índice.html
Verifyemails.php
Verifyemails_encrypt.php
Verifyemails-core.js
O que fazemos é usar uma chave criptografada nos arquivos em que queremos executar a validação em tempo real via Ajax.
Mesmo que você obtenha essa chave, ela será de pouca utilidade, pois no momento da verificação é realizada uma verificação do domínio que faz a chamada.
Para gerar a chave criptografada, executamos “verificaremails_encrypt.php” nos campos:
definir(‘TOKEN_KEY’, ‘a3_?Kd’);
definir(‘TOKEN_IV’, ‘v7$!kh’);
indicaremos as chaves para criptografar o token do serviço de validação de e-mail.
No arquivo index.html, o arquivo que contém nosso formulário, além de usá-lo para capturar os dados, é feita uma chamada para o verificaremails-core.js.
Nesse arquivo é onde colocamos o token criptografado e indicamos onde estão os arquivos que executam a validação, verificaremails.php O arquivo verificaremails.php define quatro parâmetros importantes:
definir(‘VALID_REFERER’, ‘localhost’);
Indica de qual local estamos autorizados a realizar validações.
definir(‘VALIDATE_URL’, ‘https://app.verificaremails.com/’);
Mostrar onde está localizado o aplicativo de validação de e-mail
definir(‘TOKEN_KEY’, ‘a2_?Kd’);
definir(‘TOKEN_IV’, ‘v6$!kh’);
Esses são os valores que usamos para criptografar a chave do serviço de verificação.
Essa chave criptografada é a que usaremos no arquivo “verificaremails-core.js”.
O valor desses campos deve corresponder àqueles definidos em “verificaremails_encrypt.php”.
Para determinar se a chamada está correta, no final do arquivo verifyingemails.php temos um if em que definimos com quais critérios um endereço está correto:
Se ($response == ‘ok’ ou $response == ‘ok_for_all’ ou $response == ‘accept_all’) {
echo ‘1’;
} else {
echo ‘0’;
O valor da validação é passado para o arquivo “verificaremails-core.js” que, por sua vez, o passa para index.html, que contém o formulário.
Depois que o usuário preenche o endereço de e-mail no campo com id=”email”, a chamada Ajax é feita enquanto o usuário preenche o restante dos campos.
Em segundo plano, a validação está sendo feita, de modo que, antes de enviar os dados, podemos saber se eles são válidos.
Além de reduzir as latências no processo de verificação de e-mail, também protegemos o token contra roubo.
Sei que pode parecer complicado, mas depois que você tem os arquivos, usá-los é muito simples, mesmo que queira portá-los para outras linguagens, como Ruby, Python ou Java.
Se você é cliente do verificaremails e deseja validar e-mails via JavaScript, entre em contato com nossa equipe de suporte para solicitar os arquivos para validar e-mails em PHP com segurança.
Se você preferir, também podemos fazer a implementação.