Foros del Web » Programando para Internet » PHP »

Problema funcion mail

Estas en el tema de Problema funcion mail en el foro de PHP en Foros del Web. Buenas, el problema q tengo es el siguiente, alguien ha estado entrando en mi web y mandado emails como spam desde mis paginas, he corregido ...
  #1 (permalink)  
Antiguo 24/10/2006, 07:53
 
Fecha de Ingreso: diciembre-2003
Ubicación: Málaga
Mensajes: 495
Antigüedad: 20 años, 5 meses
Puntos: 0
Problema funcion mail

Buenas, el problema q tengo es el siguiente, alguien ha estado entrando en mi web y mandado emails como spam desde mis paginas, he corregido el script para que solo pueda mandar unas direcciones que hay predefinidas. Lo ha hecho de la siguiente forma yo tengo www.dominio.com/enviar.php (en ese .php recibo todas las variables que se van a enviar por correo con POST, y ahora le filtrado el MAIL_TO con unas direcciones predefinididas para q no pudiera mandar correos a otras personas) y ahora el intruso se ha hecho un formulario en su maquina local y haciendo un submit a www.dominio.com/enviar.php haciendo spam con mi cuenta.

Como puedo hacer para que valide que sea desde mi servidor que se haga todo el envío? o de que forma puedo protegerlo para q nadie me utilice de spam???

Muchas gracias
  #2 (permalink)  
Antiguo 24/10/2006, 07:59
Avatar de maralbust  
Fecha de Ingreso: febrero-2004
Ubicación: Santiago
Mensajes: 578
Antigüedad: 20 años, 2 meses
Puntos: 0
y tienes alguna validacion en php para que antes de enviar solo reciba un mail o una expresion regular para que te genere un error en caso de llevar mas de un arroba o si excede cierta cantidad de caracteres(la menos recomendable).

saludos
__________________
..:: NADA SE PIERDE SOLO SE TRANSFORMA ::..
  #3 (permalink)  
Antiguo 24/10/2006, 08:10
Avatar de maralbust  
Fecha de Ingreso: febrero-2004
Ubicación: Santiago
Mensajes: 578
Antigüedad: 20 años, 2 meses
Puntos: 0
master aqui encontre una validación que use hace un tiempo, de donde la saque :s ni me acuerdo, pero funciona.

Código PHP:
function comprobar_email($email){
    
$mail_correcto 0;
    
//compruebo unas cosas primeras
    
if ((strlen($email) >= 6) && (substr_count($email,"@") == 1) && (substr($email,0,1) != "@") && (substr($email,strlen($email)-1,1) != "@")){
       if ((!
strstr($email,"'")) && (!strstr($email,""")) && (!strstr($email,"")) && (!strstr($email,"$")) && (!strstr($email," "))) {
          //miro si tiene caracter .
          if (substr_count($email,"
.")>= 1){
             //obtengo la terminacion del dominio
             $term_dom = substr(strrchr ($email, '.'),1);
             //compruebo que la terminación del dominio sea correcta
             if (strlen($term_dom)>1 && strlen($term_dom)<5 && (!strstr($term_dom,"
@")) ){
                //compruebo que lo de antes del dominio sea correcto
                $antes_dom = substr($email,0,strlen($email) - strlen($term_dom) - 1);
                $caracter_ult = substr($antes_dom,strlen($antes_dom)-1,1);
                if ($caracter_ult != "
@" && $caracter_ult != "."){
                   $mail_correcto = 1;
                }
             }
          }
       }
    }
    if ($mail_correcto)
       return 1;
    else
       return 0;

saludos
__________________
..:: NADA SE PIERDE SOLO SE TRANSFORMA ::..
  #4 (permalink)  
Antiguo 24/10/2006, 08:14
 
Fecha de Ingreso: diciembre-2003
Ubicación: Málaga
Mensajes: 495
Antigüedad: 20 años, 5 meses
Puntos: 0
No, solo tengo puesta la validacion de $REQUEST_METHOD y tb la validacion de las direcciones especificas. Como seria? habia pensado esta validacion:

formulario origen
---------------
En el formulario origen cojo una variable(var1) y lo codifico con md5 y lo envío por hidden

formulario destino
-----------------
Cojo la variable (var1) y tb la codifico con md5, y ahora comparo las 2 variables q estan con md5 para ver si son iguales. Si lo son que mande el email y sino q lo deniegue.

Q os parece? Alguna sugerencia?
  #5 (permalink)  
Antiguo 24/10/2006, 08:29
 
Fecha de Ingreso: diciembre-2003
Ubicación: Málaga
Mensajes: 495
Antigüedad: 20 años, 5 meses
Puntos: 0
Para la validacion de emails tengo lo siguiente:

email = document.formulario.Email.value;
AtPos = email.indexOf("@");
StopPos = email.lastIndexOf(".");
longitud='';
vuelta='';
extension='';

longitud = email.length;

for (count=longitud; count >= 0; count--)

vuelta+=email.substring(count,count-1);

extension = vuelta.indexOf(".");

if ((longitud == (StopPos+1)) || (extension < 2 || extension >5))
{
Message = "The email address is not valid. Please check it.";
alert (Message);
return false;
}
if (AtPos == -1 || StopPos <= AtPos)
{
Message = "The email address is not valid. Please check it.";
alert (Message);
return false;
}

Es en Javascript.
  #6 (permalink)  
Antiguo 24/10/2006, 08:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Yo les recomiendo usar expresiones regulares para este tipo de validaciones .. mucho más efectivas y en menos código se cubren muchos más casos de los que exponen ..

Las expresiones regulares se pueden usar en PHP y en Javascript (entro otros lenguajes) también (por si acaso).

FAQ:
http://www.forosdelweb.com/showthrea...423#post333423

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 24/10/2006, 09:00
 
Fecha de Ingreso: diciembre-2003
Ubicación: Málaga
Mensajes: 495
Antigüedad: 20 años, 5 meses
Puntos: 0
El problema del email no seria lo mas complicado, el problema seria en evitar q se cuelen y lo utilicen. Pero muchas gracias, ya he puesto la validacion del email de todas formas ;)
  #8 (permalink)  
Antiguo 24/10/2006, 09:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Cita:
Iniciado por karpoj23 Ver Mensaje
El problema del email no seria lo mas complicado, el problema seria en evitar q se cuelen y lo utilicen. Pero muchas gracias, ya he puesto la validacion del email de todas formas ;)
En ese caso usa "CAPTCHA" .. así no podrá apuntar directo a tu script de proceso de envio del e-mail.

O simplemente usar sesiones. En tu script del formulario .. generas tu variable de sesión y en el script de proceso verificas que exista tu variable de sesión. Si no existe es que está accediento directo a tu script de proceso.

Pero, lo más seguro es "Captcha" lo cual obligará a que el usuario ingrese un código de validación que verá en forma de gráfico.

Ejemplo:

FAQ
http://www.forosdelweb.com/showpost....&postcount=123


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 25/10/2006, 09:12
 
Fecha de Ingreso: diciembre-2003
Ubicación: Málaga
Mensajes: 495
Antigüedad: 20 años, 5 meses
Puntos: 0
He visto este ejemplo y buscado otros, pero me gustaria saber como ponerlo en cursiva, ponerle alguna linea y el texto no este alineado. Donde podria encontrar un ejemplo asi?
  #10 (permalink)  
Antiguo 25/10/2006, 09:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Cita:
Iniciado por karpoj23 Ver Mensaje
He visto este ejemplo y buscado otros, pero me gustaria saber como ponerlo en cursiva, ponerle alguna linea y el texto no este alineado. Donde podria encontrar un ejemplo asi?
Usa google: captcha php

O algo así .. prueba lo que encuentres y nos comentas, seguro que hay alguna classe o funcion para tal fin ya hecha que genere una imagen más "complicada".

Podrías liarte con "GD" (www.php.net/gd) que es lo que se basa para generar el gráfico para añadir más cosas a la imagen .. Si te interesa . .visita la documentación de PHP sobre GD y haz tus pruebas.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 27/10/2006, 02:01
 
Fecha de Ingreso: diciembre-2003
Ubicación: Málaga
Mensajes: 495
Antigüedad: 20 años, 5 meses
Puntos: 0
Al final pude controlar la validacion de los correos, pero ahora el bots lo que hace es añadirmelos con nextpart, es decir como direcciones con copia. Como podria evitar eso??
  #12 (permalink)  
Antiguo 27/10/2006, 03:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Cita:
Iniciado por karpoj23 Ver Mensaje
Al final pude controlar la validacion de los correos, pero ahora el bots lo que hace es añadirmelos con nextpart, es decir como direcciones con copia. Como podria evitar eso??
Ya te dije por mi parte anteriormente .. si validas la dirección de correo con expresionres regulares fieles .. no tendrías que tener ningún tipo de problema.

Es decir, no te "inyectarían" en una dirección de correo o mejor dicho campo de tu formulario donde pidas una dirección de correo más que eso y ninguna otra "cabecera" más.

Que usas para tus validaciones?

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 27/10/2006, 04:16
 
Fecha de Ingreso: diciembre-2003
Ubicación: Málaga
Mensajes: 495
Antigüedad: 20 años, 5 meses
Puntos: 0
YA encontre una funcion:

function ValidarDatos($campo)
{
$badHeads = array("Content-Type:",
"MIME-Version:",
"Content-Transfer-Encoding:",
"Return-path:",
"Subject:",
"From:",
"Envelope-to:",
"To:",
"bcc:",
"cc:");

foreach($badHeads as $valor)
{
if(strpos(strtolower($campo), strtolower($valor)) !== false)
{
echo "Sorry Access Denied.";
exit();
}
}
}
  #14 (permalink)  
Antiguo 27/10/2006, 05:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Cita:
Iniciado por karpoj23 Ver Mensaje
YA encontre una funcion:

function ValidarDatos($campo)
{
$badHeads = array("Content-Type:",
"MIME-Version:",
"Content-Transfer-Encoding:",
"Return-path:",
"Subject:",
"From:",
"Envelope-to:",
"To:",
"bcc:",
"cc:");

foreach($badHeads as $valor)
{
if(strpos(strtolower($campo), strtolower($valor)) !== false)
{
echo "Sorry Access Denied.";
exit();
}
}
}
Si, si .. esa función está muy bien.

Pero .. sabes, te puedo comentar que desde antes que se hiciera tan "popular" el tema de "inyectar cabeceras" a e-mail para "explotar" ese tipo de deficiencias de validación de campos donde se pida un e-mail .. por mi parte ya aplicaba expresiones regulares como en la FAQ que te dejé se expone .. y .. hasta la fecha NUNCA he tenído un problema de esas características.

La expresión regular que te comento filtra por un patrón dado bien definido de dirección de correo .. así que todas esas cabeceras que podrían colocarse ya se validan.

Te invito a realizar ese tipo de pruebas y sacar conclusiones tu mismo.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #15 (permalink)  
Antiguo 28/10/2006, 11:26
 
Fecha de Ingreso: diciembre-2003
Ubicación: Málaga
Mensajes: 495
Antigüedad: 20 años, 5 meses
Puntos: 0
Al final he utilizado las 2 cosas, tanto captcha como el codigo que puse anteriormente. Mucha gracias Cluster
  #16 (permalink)  
Antiguo 07/11/2006, 04:29
 
Fecha de Ingreso: diciembre-2003
Ubicación: Málaga
Mensajes: 495
Antigüedad: 20 años, 5 meses
Puntos: 0
Ahora tengo una pregunta respecto a la funcion que he puesto:

Código PHP:
function ValidarDatos($campo)
{
$badHeads = array("Content-Type:",
"MIME-Version:",
"Content-Transfer-Encoding:",
"Return-path:",
"Subject:",
"From:",
"Envelope-to:",
"To:",
"bcc:",
"cc:");

foreach(
$badHeads as $valor)
{
if(
strpos(strtolower($campo), strtolower($valor)) !== false)
{
echo 
"Sorry Access Denied.";
exit();
}
}

- Si cuando compongo el email, en el body por ejemplo tiene puesto:

Código PHP:
$body .= "<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1>\n"
y ahora le paso

Código PHP:
validardatos ($body); 
Me sale el error de que no acceso denegado(Sorry Access Denied), pq tiene puesto meta y Content-Type desde mi codigo, como puedo diferenciar el codigo que he puesto yo al codigo que puede introducir para hacer spam?
  #17 (permalink)  
Antiguo 07/11/2006, 05:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Si ese "Body" ($body) lo compones en código PHP .. es decir, que no te llega de una variable externa, en ese caso no apliques tu función "validardatos()".

Esa función lo debes aplicar a las variables que te lleguen esternas al script . de un formulario o por el URL (GET,POST ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:22.