¿Hay un equivalente a mysql_real_escape_string() para inyección de correo electrónico? Tengo un formulario donde el usuario envía su correo electrónico. Me temo que alguien podría insertar una lista de correos separados por comas y usar mi sitio para enviar spam.PHP función de validación de correo electrónico
Respuesta
Puede utilizar filter_var
para validar la dirección de correo electrónico:
if (!filter_var($address, FILTER_VALIDATE_EMAIL)) {
// invalid e-mail address
}
simplemente validar el campo con una expresión regular que se encuentra comúnmente dirección de correo electrónico única
function validate_email($e){
return (bool)preg_match("`^[a-z0-9!#$%&'*+\/=?^_\`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_\`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$`i", trim($e));
}
Si su principal preocupación es, como dice la pregunta, para verificar que los usuarios no hayan intentado engañarte para que envíen spam para ellos ingresando una lista de direcciones separadas por comas, ¿entonces no es la respuesta obvia simplemente verificar si hay comas en la entrada del usuario?
Para aquellos con versiones anteriores
/*
# PHP Email Validation for versions LESS than PHP 5.2.0)
*/
$strEmail= mysql_real_escape_string($_POST['email_e']);
if (!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$", $strEmail)){
// valid email
} else {
// not a valid email
}
eregi se depreció desde PHP 5.3 – Gerfried
Gracias por el comentario. Dully señaló. – TheBlackBenzKid
He encontrado que la buena validación de correo electrónico no es tan simple, por lo que sólo decidió comprobar si "@" y "" está en la cadena.
function email_valid($email){
/* EMAIL VALIDATION, CHECKS IF STRING CONTAINS "@" and "." */
if(strpos($email, "@") AND strpos($email, ".")){
return TRUE;
}
else {
return FALSE;
}
}
P.S. si no utiliza declaraciones preparadas PDO para escribir en la base de datos, ASEGÚRESE de filtrar los símbolos que pueden causar la inyección sql
Al menos podría estar seguro de que el '.' la posición es más grande que la '@'. Aún así, creo que es posible crear una mejor validación con la expresión de expresiones regulares. – patricia
En realidad, el correo electrónico puede incluso no contener un ".", P."user @ hostname" en la intranet debe ser perfectamente utilizable – Victor
@Victor eso es cierto. Después de algunos años de programación desde que contesté originalmente la pregunta, llegué a la conclusión de que no vale la pena validar las direcciones de correo electrónico más que ''. Lo que le importa es si el usuario puede recibir un correo electrónico de usted, que podría no ser posible incluso con una dirección de correo electrónico válida, por lo que es mucho más simple enviar un correo electrónico de confirmación en lugar de escribir un código de validación. – Tomas
Sería más sencillo verificar la longitud total de la cadena, es decir, la parte local max 64 + el dominio @ + la sección tiene un máximo de 255 caracteres = 320 caracteres, pero luego las direcciones cortas de correo no deseado todavía serían posibles. Actualmente estoy investigando la validación de correo electrónico para mi proyecto y encontré este interesante artículo email validation que explica en profundidad las direcciones de correo electrónico válidas y el rfc2822. Allí sugieren una forma mucho más simple de validación que evitaría que las listas separadas por comas fueran una forma efectiva de correo no deseado.
$isValid = true;
$atIndex = strrpos($email, "@");
if (is_bool($atIndex) && !$atIndex)
{
$isValid = false;
}
else
{
$domain = substr($email, $atIndex+1);
$local = substr($email, 0, $atIndex);
// ... work with domain and local parts
}
Esto simplemente rompe la dirección de correo electrónico abajo encontrando el último signo @ y declara todo lo que pasa antes de que sea la parte local de la dirección que tiene un límite de 64 caracteres. Si no hay un signo @, strrpos devolverá un valor bolean de falso. Voy a hacer uso de esto en mi función de validación.
- 1. PHP validación de correo electrónico
- 2. correo electrónico validación de campo de correo
- 3. enlace de validación por correo electrónico
- 4. Validación de correo electrónico TSQL (sin regex)
- 5. jQuery requisitos de validación de correo electrónico
- 6. Función simple de validación de correo electrónico SMTP para php? Además, ¿vale la pena?
- 7. Validación de correo electrónico MX Lookup
- 8. regex para la validación de correo electrónico
- 9. Validación de expresiones regulares por correo electrónico
- 10. filter_var o función personalizada para la validación de correo electrónico en php
- 11. validación de direcciones de correo electrónico no latinas
- 12. envío de correo electrónico masivo usando PHP
- 13. Microsoft SQL Server correo electrónico validación
- 14. php error de correo electrónico filter_var
- 15. Recibir correo electrónico usando PHP
- 16. Reglas de validación de correo electrónico personalizadas de Codeigniter
- 17. cómo formatear el correo electrónico de php
- 18. Tuberías de correo electrónico con script php
- 19. Colas de correo electrónico en php
- 20. PHP Envío de correo electrónico BCC
- 21. Validación de dirección de correo electrónico para ASP.NET
- 22. validación jQuery plugin de múltiples direcciones de correo electrónico
- 23. PHP enviar correo a varias direcciones de correo electrónico
- 24. Javascript múltiples expresiones regulares correo electrónico de validación
- 25. correo electrónico de validación del modelo con DataAnnotations y DataType
- 26. Validación de correo electrónico en textField en iPhone SDK
- 27. ¿Hay una biblioteca php para la validación de la dirección de correo electrónico?
- 28. Mejor expresión regular para la validación del formato de correo electrónico con Validación de ASP.NET 3.5
- 29. Enviar correo electrónico con saltos de línea mediante correo electrónico() en php
- 30. ¿Cómo validar un correo electrónico en PHP?
Extiéndalo a través de this regex. –