Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Cómo estrujarse las meninges con la función "email" (https://www.clubdelphi.com/foros/showthread.php?t=39341)

dec 17-01-2007 16:43:53

Cómo estrujarse las meninges con la función "email"
 
1 Archivos Adjunto(s)
Hola,

Hasta hoy hacía uso de una sencilla clase "Email" que encapsulaba básicamente a la función "email" de PHP. El caso es que me puse sobre ella un poco y al cabo terminó en esto...

Nota: la copio por aquí por si alguien quiere echarla un vistazo e incluso, por qué no, utilizarla. Evidentemente hay otras formas de enviar correo vía PHP, y existen no pocas clases (estupendas) y librerías, scripts, etc., etc. :)

Nota 2: Iba a copiar aquí mismo el código fuente, pero, no es posible porque ha de contener algo que el sistema de seguridad del Foro no deja pasar. Bueno. Entonces adjunto el código fuente en el archivo de marras. Pasa nada. :D

kayetano 18-01-2007 11:34:31

Hola

No veo que hayas tenido en cuenta la inyección de cabeceras que permite la función mail, podías aprobechar y filtrar el parámetro "remitente" para evitar lo.

dec 18-01-2007 21:24:22

Hola,

Hum... ¿filtrarlo cómo? Hay que entender que la clase no valida la entrada del usuario. Es decir, que se añadirá una dirección de remitente, pero, esta ha de ser validada previamente por quien vaya a utilizar la clase Email. Pero estoy abierto a todo tipo de sugerencias Kayetano. :)

kayetano 19-01-2007 13:10:16

Hola dec

El problema es que la función mail() tiene un pequeño problema y es que se pueden añadir cabeceras que modifiquen parcial o totalmente el correo original, cosa que puede ser aprobechada por los SPAMERS, esto lo comenté en su momento en este hilo.

Este problema no es una validación tipico de si el correo esta compuesto por:
Código:

caracteres + el simbolo @ + caracteres + un punto + [2-3] caracteres
sino que es un control de seguridad que NUNCA debe permitir la introducción por ejemplo de "\n" o "\r" o una serie de cabeceras. Por lo tanto estaría bien controlar este problema en la base y no en niveles superiores.

Pienso yo :)

dec 19-01-2007 15:11:57

Hola,

A ver. Tal como lo tengo en la cabeza el problema redica en la dirección "remitente", que se incluye en la cabecera correspondiente: porque la dirección del destinatario, así como el cuerpo y el asunto del correo no se incluyen en la cabecera. Si esto es así lo que hay que comprobar sin duda es si dicha dirección de correo remitente es una dirección de correo válida y no nada más.

Cuento con una clase "Validar" que incluye un método capaz de averiguar si una cadena puede ser una dirección de correo bien formada. Dicho método no se tragará esto:

Código:

direccion@correo.es\nXXX
Es decir, si tratamos de validar eso no resultará. Ahora bien, como dices, aunque se piensa validar la dirección de correo del remitente antes de utilizarla en la clase Email, tampoco estaría demás que esta clase hiciera también la comprobación, de manera que si se olvidara lo primero... pues eso.

Gracias Kayetano por tus comentarios. :)

kayetano 19-01-2007 15:19:47

Hola

Cita:

Empezado por dec
Cuento con una clase "Validar" que incluye un método capaz de averiguar si una cadena puede ser una dirección de correo bien formada. Dicho método no se tragará esto:

Efectivamente si la validación es correcta no haría falta lo que te cuento, pero por lo general esa validación se suele hacer con JavaScript, por lo que solo se validará en el caso de que se trabaje con el formulario original, pero un SPAMER lo que hace es montarse una llamada directa al script que monta el correo, mandándole los datos por POST o GET, por lo que se salta todas las validaciones realizadas en JavaScript por lo tanto es aconsejable validarlo en PHP.

Pues bien si es aconsejable validarlo en PHP y siempre antes de la función mail() pues quedaría muy bien integrarlo en la clase que has creado para que esta comprobación (obligatoria) sea transparente para el usuario de la clase.

Esto es una simple recomendación, ya lo he comentado algunas veces, cuando me pongo con algo me gusta hacerlo lo mejor posible y eso intento inculcar en este foro.

dec 19-01-2007 15:36:02

Hola,

Si llevas razón Kayetano. O eso pienso. Desde luego es algo que tengo que añadir a la clase Email. Seguramente no pienso demasiado en que vaya a utilizar esta clase mucha gente... es más bien para uso particular de quien suscribe. :)

Pero llevas razón. Y no está para nada demás hacerlo como dices, y así se hará te lo aseguro. ;)

Actualización: edité el código de la clase ya con un método de validación. No lo actualizaré en sucesivas ocasiones, puesto que esta clase tendrá acaso otras posibles mejoras/correcciones. La idea de copiarla por aquí no era tanto presentar la octava maravilla del mundo en clases PHP sino bueno... ver si podía servir a alguien, pero, no le vamos a hacer seguimiento, ¿de acuerdo? Pues eso. :)


La franja horaria es GMT +2. Ahora son las 02:55:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi