Sí, una dirección válida de correo electrónico se puede utilizar como contenedor de algunas cadenas cuidadosamente diseñadas.
salir de la mentalidad de "filtrado" y entrar en la mentalidad de "escapar". Un filtro universal "hazlo seguro" simplemente no existe.
por ejemplo, si la dirección de correo electrónico se enviará a un documento de texto plano, entonces no se necesita hacer nada. si se envía a un documento html, como un nodo de texto, debe escaparse para caracteres especiales y entidades html. si se está colocando en un documento html, y su valor estará dentro de un atributo html, entonces se deberá realizar un escapado muy cuidadoso, y esto dependerá del contexto. si se está utilizando en una consulta sql, debe escaparse a través de la función de escape específica de la base de datos. y así.
es todo sobre el contexto de uso, no el contenido de la cadena. esto sirve para todo (no solo correos electrónicos u otras aportaciones de los usuarios), y no es solo una cuestión de seguridad, sino que es una cuestión de programación correcta.
fyi, recuerdo la especificación de la dirección de correo electrónico que permite cadenas entrecomilladas, por lo que algo como "<script>alert('xss')</script>"@example.com
sería válido. las posibilidades son obvias.
Por ejemplo, tampoco existe un saludo universalmente" seguro ". Lo cortés en algunas sociedades es grosero en otras. ¡Conoce tu contexto! – Xeoncross
+1. FILTER_VALIDATE_EMAIL es para verificar si las direcciones de correo electrónico son válidas, y como muestra el ejemplo anterior, eso no tiene nada que ver con ningún otro problema de inyección. Si * sí * bloqueó las cotizaciones o menos que, entonces solo sería por co-incidencia y no sería algo en lo que nunca debería confiar. – bobince