En este artículo veremos cómo validar un email en PHP de forma segura, evitando que obtengan el token de nuestro servicio de verificación de emails. En los ejemplos utilizaremos el servició para validar emails de verificaremails.com aunque el mismo sistema funciona para cualquier servicio para validar email.
Actualmente existen multitud de servicios que permiten validar emails. Las soluciones basadas en scripts, aunque son un primer paso, solo permiten validar el email a través de reglas sintácticas o realizando comprobaciones del dominio y registros MX más o menos sofisticadas.
Si necesitas validar un email de forma fiable, tendrás que utilizar un servicio profesional para validar email, a parte de las verificaciones anteriores los servicios profesionales realizar una simulación profunda de la conexión o comprueban el email en sus listas de spam trap mails conocidos para poder verificar el email de forma fiable.
Cómo funciona la validación de email en php
Casi todos los servicios funcionan igual, a través de una API podemos validar en tiempo real el email, para ello se suele realizar una llamada Curl, donde se invoca el servicio y se transmite el email junto con el token del servicio. Podéis encontrar documentación detallada en “Documentación verificar email”
En el caso del servicio de verificaremails.com la llamada en PHP es:
$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);
Cómo podéis ver la llamada es muy simple. Si la validación la realizamos en nuestros servicios de BackOffice, la “key” o token para realizar la validación permanecerá secreta en todo el proceso.
Podemos modificar nuestro script para que al pulsar “enviar” en nuestro formulario de registro se realice la validación del email. Este mecanismo es eficaz y segura, el único inconveniente es que la validación se hace una vez el usuario ha completado el formulario.
Validar emals vía API en tiempo real suele llevar de media unos 2 segundos, aunque es una verificación rápida, no es inmediata.
Una mejora de este método consistiría en validar el email mientras el usuario esta completando el resto de los campos del formulario. Si detectamos que la dirección es inválida lo podemos indicar en el formulario sin necesidad de enviarlo. Mejorando la usabilidad del servicio e incrementando la conversión de los registros.
Desde un punto de vista técnico tan solo debemos añadir unas líneas de JavaScript a nuestro código de PHP.
Riesgos de validar un email en PHP con Java Script
Aunque la llamada anterior es muy simple de implementar, entraña un riesgo. Quiero recordar que para validar el email realizamos una llamada Curl, donde le pasamos al servicio de validar email el correo a verificar y el token del servicio. Si un usuario capturara ese token, podría validar emails.
Cómo validar de forma segura eun email con PHP y JavaScript
En verificaremails.com hemos desarrollado una librería para evitar este riesgo. Aunque en los ejemplos de código que explicaremos están explicitados para Verificaremails, también pueden funcionar con cualquier otro servicio.
La librería utiliza 4 ficheros:
Index.html
Verificaremails.php
Verificaremails_encrypt.php
Verificaremails-core.js
Lo que hacemos es utilizar una clave encriptada en los ficheros donde queremos realizar la validación en tiempo real vía Ajax. Aunque obtengan esta clave de poco les va a servir ya que en el momento de la verificación se realiza una comprobación del dominio que realiza la llamada.
Para generar la clave encriptada ejecutamos “verificaremails_encrypt.php” en los campos:
define(‘TOKEN_KEY’, ‘a3_?Kd’);
define(‘TOKEN_IV’, ‘v7$!kh’);
indicaremos las claves para encriptar el token del servicio para validar email.
En el fichero index.html, es el fichero que contiene nuestro formulario, a parte de utilizarlo para captar los datos, se realiza una llamada a verificaremails-core.js. En este fichero es donde colocamos el token encriptado e indicamos donde están los ficheros que realizan la validación, verificaremails.php
El fichero verificaremails.php define 4 parámetros importantes:
define(‘VALID_REFERER’, ‘localhost’);
Indica desde que ubicación estamos autorizados a realizar validaciones
define(‘VALIDATE_URL’, ‘https://app.verificaremails.com/’);
Muestra donde esta la aplicación para validar email
define(‘TOKEN_KEY’, ‘a2_?Kd’);
define(‘TOKEN_IV’, ‘v6$!kh’);
Son los valores que utilizamos para encriptar la clave del servicio de verificación. Esta clave encriptada es la que utilizaremos en el fichero “verificaremails-core.js”. El valor de estos campos debe coincidir con los definidos en “verificaremails_encrypt.php”.
Para determinar si la llamada es correcta, en el final del fichero verificaremails.php tenemos un if donde definimos con que criterios una dirección es correcta:
if ($response == ‘ok’ or $response == ‘ok_for_all’ or $response == ‘accept_all’) {
echo ‘1’;
} else {
echo ‘0’;
Para saber todos los códigos de error podemos visitar la Guía de resultados para validar email
El valor de la validación se pasa al fichero “verificaremails-core.js” que a su vez lo pasa a index.html que contiene el formulario. Una vez el usuario ha completado la dirección de email en el campo con id=”email” se realiza la llamada Ajax, mientras el usuario esta completando el resto de campos. En “background” se esta realizando la validación, de forma que antes de enviar los datos podemos saber si son válidos. A parte de reducir latencias en el proceso de verificar email, también aseguramos el token frente a robos.
Se que el tema puede parecer complicado, pero una vez tengáis los ficheros utilizarlos es muy simple, incluso si los queréis portar a otros lenguajes como Ruby, Python o Java.
Si sois clientes de verificaremails y queréis realizar la validación de emails vía JavaScript poneros en contactos con nuestro equipo de soporte para solicitar los ficheros para validar emails en PHP de forma segura. Si preferís también podemos hacer nosotros la implementación.