Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Cómo estrujarse las meninges con la función "email"

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.
Archivos Adjuntos
Tipo de Archivo: zip email.class.zip (1,9 KB, 14 visitas)
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 19-01-2007 a las 17:43:19.
Responder Con Cita
  #2  
Antiguo 18-01-2007
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
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.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #3  
Antiguo 18-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 19-01-2007
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
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
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #5  
Antiguo 19-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 19-01-2007
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
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.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #7  
Antiguo 19-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 19-01-2007 a las 17:42:06.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Función parecida al "System" de C damix Varios 3 02-07-2005 19:35:32
Error con la funcion "locate" de una tabla tannyk Tablas planas 1 01-02-2005 07:07:41
Optener un Stream como "Result" en una funcion sitrico Varios 3 24-11-2004 22:06:38
Problema con funcion "COPY" (string) emeceuy Varios 6 28-05-2004 23:39:31


La franja horaria es GMT +2. Ahora son las 23:29:19.


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
Copyright 1996-2007 Club Delphi