Foros del Web » Programando para Internet » PHP »

phpforms, ¿Como evitar el spam?

Estas en el tema de phpforms, ¿Como evitar el spam? en el foro de PHP en Foros del Web. Hola a todos: Tengo un script prefabricado llamado phpforms que utilizo para generar y procesar formularios para las webs que diseño. El hosting donde tengo ...
  #1 (permalink)  
Antiguo 22/09/2006, 11:18
 
Fecha de Ingreso: diciembre-2003
Mensajes: 49
Antigüedad: 16 años
Puntos: 0
phpforms, ¿Como evitar el spam?

Hola a todos:

Tengo un script prefabricado llamado phpforms que utilizo para generar y procesar formularios para las webs que diseño. El hosting donde tengo alojadas las páginas me ha dicho lo siguiente:

"Parece ser que se esta enviando spam desde el dominio ".com". Hay varios ficheros de formularios y algunos más que sospechos que podrian ser usados para el envio del spam . Como todo el directorio phpforms , por favor revisa su seguridad. Si no lo resuelves no nos queda mas remedio que suspenderlo, el envio de pinsing y spam esta muy perseguido y peude traer graves consecuencias."

Como puedo evitar que esto siga ocurriendo? Por favor necesito ayuda pues estos formularios son indispensables para mi cliente..

Gracias y un saludo
  #2 (permalink)  
Antiguo 22/09/2006, 12:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 17 años, 11 meses
Puntos: 129
Y que es "phpforms?" .. donde se puede ver? ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 22/09/2006, 12:23
 
Fecha de Ingreso: diciembre-2003
Mensajes: 49
Antigüedad: 16 años
Puntos: 0
Esta instalado en www.cuidadodelhogar.es/phpforms/admin
Gracias
  #4 (permalink)  
Antiguo 22/09/2006, 12:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 17 años, 11 meses
Puntos: 129
Cita:
Iniciado por raulo460 Ver Mensaje
Esta instalado en www.cuidadodelhogar.es/phpforms/admin
Gracias
Lo que quisieramos ver es el código del mismo para ver como trabaja . .ya sea que nos des la web oficial o lo que corresponda. No nos sirve de nada ver una página de "login" en una sección de "administración" (aunque al píé del mismo firme con el nombre del script y su versión y por supuesto podríamos usar "google" para buscarlo, .. se trata de lo pongas fácil tu para quien pueda responderte).

Ahí podríamos ver "falencias" tal vez de dicho código y consejos de como solucionarlo .. lo cual no sólo te serviría a tí sino a los autores del mismo. Por cierto, tu no te has contactado con el autor(s) para hacerles ver el problema? ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 22/09/2006, 13:00
 
Fecha de Ingreso: diciembre-2003
Mensajes: 49
Antigüedad: 16 años
Puntos: 0
Si claro, perdón esta es una página con la demostración del script en funcionamiento:

http://pf-demo.phpforms.net/admin.php?act=login

Este es el código de phpforms.php:

Código:
function form( $fid )
{
   $aMatches = array();
   $sContent = '';
   $mSFile   = '';

   $sUrl = "http://devel.i[n]t/";

   $sDns  = preg_replace( "/^http:\/\//i", '', $sUrl );
   preg_match( "/\/(.*)$/", $sDns, $aMatches );
   if ( isset($aMatches[1]) ) $sPath = $aMatches[1]; else $sPath = '';
   $sPath .= "index.php?fid={$fid}&embed=1";
   $sDns  = preg_replace( "/\/.*$/",       '', $sDns );

   if ( $mSFile = fsockopen( $sDns, 80, &$errno, &$errstr, 80 ) )
   {
      fputs( $mSFile, "GET /$sPath HTTP/1.0\r\nHost: $sDns\r\n\r\n");
      while ( !feof($mSFile) ) $sContent .= fgets( $mSFile, 0xFFF );
      fclose( $mSFile );
      $sContent = preg_replace("/^.*?\r\n\r\n/s", "", $sContent);
      echo $sContent;
   }
}

?>
Y este es el archivo index.php:


Código PHP:
<?


If ($action=="mysql"){

    
#Grab email addresses de MySQL

    
include "./mysql.info.php";

    if (!
$sqlhost || !$sqllogin || !$sqlpass || !$sqldb || !$sqlquery){

    print 
"Porfavor configure su mysql.info.php en tu MySQL informacion. Todas las opciones requeridas.";

    exit;

    }

    
$db mysql_connect($sqlhost$sqllogin$sqlpass) or die("Conexion en MySQL Fallida.");

    
mysql_select_db($sqldb$db) or die("Seleecione su DataBase $sqldb");

    
$result mysql_query($sqlquery) or die("Secion fallida: $sqlquery");

    
$numrows mysql_num_rows($result);

    

    for(
$x=0$x<$numrows$x++){

    
$result_row mysql_fetch_row($result);

    
$oneemail $result_row[0];

    
$emaillist .= $oneemail."\n";

    }

    }



if (
$action=="send"){

    
$message urlencode($message);

    
$message ereg_replace("%5C%22""%22"$message);

    
$message urldecode($message);
    
$message stripslashes($message);
    
$subject stripslashes($subject);

}



?>

<form name="form1" method="post" action="" enctype="multipart/form-data">

  <br>

  <table width="100%" border="0">

    <tr> 

      <td width="10%"> 

        <div align="right"><font size="-5" face="Verdana, Arial, Helvetica, sans-serif">Your 

          Mail:</font></div>

      </td>

      <td width="20%"><font size="-5" face="Verdana, Arial, Helvetica, sans-serif"> 

        <input type="text" name="from" value="<? print $from?>" size="30">

        </font></td>

      <td width="31%"> 

        <div align="right"><font size="-5" face="Verdana, Arial, Helvetica, sans-serif">Your 

          Name:</font></div>

      </td>

      <td width="45%"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif"> 

        <input type="text" name="realname" value="<? print $realname?>" size="30">

        </font></td>

    </tr>

    <tr> 

      <td width="10%"> 

        <div align="right"><font size="-5" face="Verdana, Arial, Helvetica, sans-serif">Repit:</font></div>

      </td>

      <td width="18%"><font size="-5" face="Verdana, Arial, Helvetica, sans-serif"> 

        <input type="text" name="replyto" value="<? print $replyto?>" size="30">

        </font></td>

      <td width="31%"> 

        <div align="right"><font size="-5" face="Verdana, Arial, Helvetica, sans-serif">Upload 

          Txt:</font></div>

      </td>

      <td width="41%"><font size="-5" face="Verdana, Arial, Helvetica, sans-serif"> 

        <input type="file" name="file" size="30">

        </font></td>

    </tr>

    <tr> 

      <td width="10%"> 

        <div align="right"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">Subject:</font></div>

      </td>

      <td colspan="3"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif"> 

        <input type="text" name="subject" value="<? print $subject?>" size="90">

        </font></td>

    </tr>

    <tr valign="top"> 

      <td colspan="3"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif"> 

        <textarea name="message" cols="60" rows="10"><? print $message?></textarea>

        <br>

        <input type="radio" name="contenttype" value="plain">

        Plain 

        <input type="radio" name="contenttype" value="html" checked>

        HTML 

        <input type="hidden" name="action" value="send">

        <input type="submit" value="Send Emails">

        </font></td>

      <td width="41%"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif"> 

        <textarea name="emaillist" cols="30" rows="10"><? print $emaillist?></textarea>

        </font></td>

    </tr>

  </table>

</form>



<?

if ($action=="send"){



    if (!
$from && !$subject && !$message && !$emaillist){

    print 
"Porfavor complete todo lo necesario.";

    exit;

    }

    

    
$allemails split("\n"$emaillist);

    
$numemails count($allemails);



    
#Open the file attachment if any, and base64_encode it for email transport

    
If ($file_name){

        @
copy($file"./$file_name") or die("El archivo que intestaste subir al servidor, no puede ser copiado");

        
$content fread(fopen($file,"r"),filesize($file));

        
$content chunk_split(base64_encode($content));

        
$uid strtoupper(md5(uniqid(time())));

        
$name basename($file);

    }

    

    for(
$x=0$x<$numemails$x++){

        
$to $allemails[$x];

        if (
$to){

        
$to ereg_replace(" """$to);

        
$message ereg_replace("&email&"$to$message);

        
$subject ereg_replace("&email&"$to$subject);

        print 
"SENDING SCAM TO $to.......";

        
flush();

        
$header "From: $realname <$from>\r\nReply-To: $replyto\r\n";

        
$header .= "MIME-Version: 1.0\r\n";

        If (
$file_name$header .= "Content-Type: multipart/mixed; boundary=$uid\r\n";

        If (
$file_name$header .= "--$uid\r\n";

        
$header .= "Content-Type: text/$contenttype\r\n";

        
$header .= "Content-Transfer-Encoding: 8bit\r\n\r\n";

        
$header .= "$message\r\n";

        If (
$file_name$header .= "--$uid\r\n";

        If (
$file_name$header .= "Content-Type: $file_type; name=\"$file_name\"\r\n";

        If (
$file_name$header .= "Content-Transfer-Encoding: base64\r\n";

        If (
$file_name$header .= "Content-Disposition: attachment; filename=\"$file_name\"\r\n\r\n";

        If (
$file_name$header .= "$content\r\n";

        If (
$file_name$header .= "--$uid--";

        
mail($to$subject""$header);

        print 
"ok<br>";

        
flush();

        }

        }



}

?>
Espero que podais ayudarme.
Un saludo
  #6 (permalink)  
Antiguo 22/09/2006, 13:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 17 años, 11 meses
Puntos: 129
Por lo que veo es un generador de "formularios" con el código PHP que lo admistra (y javascript por médio también).

Realmente no tengo tiempo para evaluar todo el código que ese aplicación genera.

Sólo te puedo hacer algunas preguntas para que tu que usas ese código y lo conoces respondas.

La dirección de e-mail donde se envian esos formularios y que envia tu script PHP de proceso .. donde la indicas?
En un campo del formulario? .. o en el código PHP?

Ese sistema envia cópias o auto-respuestas de recepción de los datos al usuario que usa ese formulario (por algún campo donde le pidas el e-mail)?

Por otro lado .. podrías visitar su web oficial y sus foros, también tienes sistemas para dar soporte. Expón allá el problema. Pero antes deberías concretar con tu proveedor donde ven ellos el "fallo" concretamente para que te ayude a corregirlo, es muy feo decir "tienes un problema, arreglatelas" y no por lo menos indicar por donde un poco más atinado.

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 22/09/2006, 13:22
 
Fecha de Ingreso: diciembre-2003
Mensajes: 49
Antigüedad: 16 años
Puntos: 0
Las direcciones a las que quiero que vayan dirijidos los correos las indico en un campo de formulario dentro del administrador.
El sistema no envía ninguna copia ni autorespuesta a los usuario que escriben a través de él.
He visitado sus foros pero no he obtenido respuesta alguna.
Algunos comentarios de mi proveedor son estos:

"El phpforms porque esta todo con usuario y grupo apache, tiene muy mala pinta ese script."

"El formulario es utilizado para enviar spam a otras cuentas, cuentas que elijen los que aprovechan la vulnerabilidad del script, en muchos casos las cuentas del usuario tambien se llenan con emails devueltos de ese spam, en otros casos simplemente se utiliza el servidor a traves de ese script vulnerable para enviar el spam (como es este el caso).

A las 17:23 de hoy se han enviado ya 8785 emails."

"El problema persiste, cada dia mandan una remesa de 10000 emails de spam . Por favor hasta que puedas cambiar el formulario elimina el anterior o tendremos que suspender el espacio, total tu cliente no va a tener la web funcionando de ninguna manera porque cuando envian los 10000 emails ya no se puede enviar mas email y no le será funcional el espacio."

Gracias
  #8 (permalink)  
Antiguo 22/09/2006, 15:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 17 años, 11 meses
Puntos: 129
Las direcciones a las que quiero que vayan dirijidos los correos las indico en un campo de formulario dentro del administrador.

Supongo que en ese caso por esos campos "hidden" que van en el formulario que generas se indica el "ID" del formualrio y en consecuencia los datos de envio y demás gestionado en PHP.

Cita:
El formulario es utilizado para enviar spam a otras cuentas, cuentas que elijen los que aprovechan la vulnerabilidad del script, en muchos casos las cuentas del usuario tambien se llenan con emails devueltos de ese spam, en otros casos simplemente se utiliza el servidor a traves de ese script vulnerable para enviar el spam (como es este el caso).

A las 17:23 de hoy se han enviado ya 8785 emails."

"El problema persiste, cada dia mandan una remesa de 10000 emails de spam . Por favor hasta que puedas cambiar el formulario elimina el anterior o tendremos que suspender el espacio, total tu cliente no va a tener la web funcionando de ninguna manera porque cuando envian los 10000 emails ya no se puede enviar mas email y no le será funcional el espacio."
Si eso es cierto ..

1) Ya sabes, olvidate de "phpforms" ..
2) Haz este anuncio en los foros de "phpforms" y avisa a su equipo de desarrollo .. a ver si lo pueden solventar en próximas versiones o "parche" de seguridad que saquen.

Por mi parte . .como no he estudiado el código que genera y usa "PHP Formos" no te sé decir por donde falla .. Las preguntas que te hacía eran en parte para ver una de las fallas más típicas de "form mailers" genécos que existían antes donde el e-mail del receptor se indicaba en forma "plana" en un simple campo hidden del formulario mismo .. con la consiguiente facilidad para suplantar Tu formulario y automatizar el proceso por otro lado.

Por otro lado, algo que mejoraría la seguridad sería el uso de sesiones. Las usas? ..

Se trata de que crees una variable de sesión en el script del formulario y la verfiques (su existencia) en el script que hace el proceso de envio. Así no te inyectan directo a tu script de proceso datos de otros servidores/clientes.

También puedes usar técnicas de "captcha" (en las FAQ's tienes un ejemplo) para que sólo un usuario "humano" use el formulario pues tendrá que digitar en otro campo un "código" que en forma gráfica se le proporcionará.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 22/09/2006 a las 16:04
  #9 (permalink)  
Antiguo 22/09/2006, 17:25
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 14 años, 4 meses
Puntos: 7
El captcha, es lo que mayor solucion (en mi opinion) te daria, es algo complicado (yo estoy desarrollando uno ahora) pero muy efectivo y permite mucha variedad.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #10 (permalink)  
Antiguo 22/09/2006, 19:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 17 años, 11 meses
Puntos: 129
Cita:
Iniciado por shakaran Ver Mensaje
El captcha, es lo que mayor solucion (en mi opinion) te daria, es algo complicado (yo estoy desarrollando uno ahora) pero muy efectivo y permite mucha variedad.
Bueno ... por suerte ese tema está más que "reinventado" .. no seremos los primeros en hacerlo. Para ejemplo .. el que tenemos en nuestras FAQ's:

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.
  #11 (permalink)  
Antiguo 23/09/2006, 03:15
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 14 años, 4 meses
Puntos: 7
Otra forma interesante de crearlo ;) No lo habia visto, ya lo tengo agregado a marcadores.

Un saludo.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #12 (permalink)  
Antiguo 23/09/2006, 08:28
 
Fecha de Ingreso: diciembre-2003
Mensajes: 49
Antigüedad: 16 años
Puntos: 0
Voy a intentar utilizar el captcha con el php-forms, a ver si puedo hacer que funcione. Muchas gracias por la ayuda amigos.
Un saludo.
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 08:48.