Foros del Web » Programación para mayores de 30 ;) » Programación General »

SPAM a traves de rutinas CGI y Perl ¿Como evitarlo?

Estas en el tema de SPAM a traves de rutinas CGI y Perl ¿Como evitarlo? en el foro de Programación General en Foros del Web. Hola amigos del foro quiero compartir con ustedes un problema que se me ha presentado recientemente y aun no tengo una solucion. Sucede que algunas ...
  #1 (permalink)  
Antiguo 16/09/2005, 06:35
Avatar de Twity  
Fecha de Ingreso: agosto-2002
Mensajes: 86
Antigüedad: 21 años, 8 meses
Puntos: 0
Pregunta SPAM a traves de rutinas CGI y Perl ¿Como evitarlo?

Hola amigos del foro quiero compartir con ustedes un problema que se me ha presentado recientemente y aun no tengo una solucion.

Sucede que algunas de las paginas que administro como webmaster utilizan scripts de CGI para el envio de email a traves de formularios. Hasta acá todo bien. Pero a partir de la semana pasada me doy cuenta que estas rutinas CGI están siendo utilizadas por spamers para enviar sus correos.
El gran problema es que mi proveedor de hosting me está cerrando todas las cuentas en forma eutomatizada por envio de spam.

Pregunto:

¿A alguien le está pasando lo mismo?
¿Conocen algun parche para evitar que estas rutinas sean vulnerables a estos ataques?

Desde ya gracias por todo.
Saludos cordiales
__________________
www.laolaweb.com.ar
http://www.laolaweb.com.ar/marca_laola.gif
Gestión para la comercialización en la web
  #2 (permalink)  
Antiguo 16/09/2005, 07:54
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Hola, primero que nada: que script CGI usas ?

Bajate el FormMail.pl de www.scriptarchive.com que tiene una configuración que se llama @referers en la cual ponés el dominio en donde está el script y eso hace que solo puedan enviarse mails a las casillas de ese dominio y no a otras...Además de no aceptar formularios que no estén alojados en ese dominio...(Los spamers usan formularios en sus PC...)

Espero que te sirva

Saludos
__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 16/09/2005, 08:39
Avatar de Datacenter1
Usuario no validado
 
Fecha de Ingreso: agosto-2005
Ubicación: Chicago
Mensajes: 1.982
Antigüedad: 18 años, 8 meses
Puntos: 144
Saludos

El problema que mencionas es bastante común la mayoría de las veces es por scripts programados incorrectamente y/o vulnerabilidades en el servidor.

Para evitarlo aqui algunos simples consejos:

- Asegurate de que tu script inicialize cualquier variable utilizada
- Asegurate de que tu script solo puede ser usado desde tu dominio y no explotado remotamente
- Consulta con tu proveedor que otras medidas puedes tomar

Espero que esto te ayude
  #4 (permalink)  
Antiguo 16/09/2005, 09:15
Avatar de Twity  
Fecha de Ingreso: agosto-2002
Mensajes: 86
Antigüedad: 21 años, 8 meses
Puntos: 0
Hola Datacenter1. Gracias por la respuesta pero tengo mas dudas que problemas:

Diseño mis script con un programa llamado PerlBuilder, me es muy util y práctico, nunca me da errores ni tengo problemas de programacion (ya que mis conocimientos de programacion son reducidos).

El tema es que no se como hacer para que:
- el script inicialize cualquier variable utilizada
- el script solo puede ser usado desde tu dominio y no explotado remotamente

Te pego una copia de unos de los script que estoy teniendo problemas a ver si me podrás ayudar gracias de antemano:

#!/usr/bin/perl
$mail_prog = '/opt/exim/bin/exim -t' ;

&GetFormInput;

$nombre = $field{'nombre'} ;
$email = $field{'email'} ;
$confirmacion = $field{'confirmacion'} ;
$telefono = $field{'telefono'} ;
$localidad = $field{'localidad'} ;
$pais = $field{'pais'} ;
$comentario = $field{'comentario'} ;
$Submit = $field{'Submit'} ;

$recip = "info\@laolaweb.com.ar" ;

open (MAIL, "|$mail_prog -t");
print MAIL "To: $recip\n";
print MAIL "Reply-to: \"$nombre\" <$email>\n";
print MAIL "From: \"$nombre\" <$email>\n";
print MAIL "Subject: Consulta QUIERO UNA WEB\n";
print MAIL "\n\n";
print MAIL "Consulta QUIERO UNA WEB\n" ;
print MAIL "\n" ;
print MAIL "Email: ".$email."\n" ;
print MAIL "Confir:".$confirmacion."\n" ;
print MAIL "Nombre:".$nombre."\n" ;
print MAIL "Tel: ".$telefono."\n" ;
print MAIL "".$localidad.", ".$pais."\n" ;
print MAIL "\n" ;
print MAIL "\n" ;
print MAIL "Comentario:".$comentario."\n" ;
print MAIL "\n" ;
print MAIL "Eso es todo.\n" ;
print MAIL "\n\n";
close (MAIL);

print "Content-type: text/html\n\n";
print "<html>\n" ;
print "<head>\n" ;
print "<title>La Ola</title>\n" ;
print '<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">'."\n" ;
print "<meta content=text/css http-equiv=Content-Style-Type>\n" ;
print '<script language="JavaScript">'."\n" ;
print "\n" ;
print "function right(e) {\n" ;
print "if (navigator.appName == \'Netscape\' && \n" ;
print "(e.which == 3 || e.which == 2))\n" ;
print "return false;\n" ;
print "else if (navigator.appName == \'Microsoft Internet Explorer\' && \n" ;
print "(event.button == 2 || event.button == 3)) {\n" ;
print 'alert("Página protegida por La Ola. Todos los derechos reservados. ");'."\n" ;
print "return false;\n" ;
print "}\n" ;
print "return true;\n" ;
print "}\n" ;
print "\n" ;
print "document.onmousedown=right;\n" ;
print "document.onmouseup=right;\n" ;
print "if (document.layers) window.captureEvents(Event.MOUSEDOWN);\n" ;
print "if (document.layers) window.captureEvents(Event.MOUSEUP);\n" ;
print "window.onmousedown=right;\n" ;
print "window.onmouseup=right;\n" ;
print "</script>\n" ;
print '<style type="text/css"><!--'."\n" ;
print "-->\n" ;
print "</style>\n" ;
print '<link rel="stylesheet" href="styles.css">'."\n" ;
print "</head>\n" ;
print '<body bgcolor="#000033" onLoad="">'."\n" ;
print '<table width="500" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#000066">'."\n" ;
print " <tr> \n" ;
print ' <td width="20"><img src="http://www.laolaweb.com.ar/esquina_sup_isq.gif" width="20" height="20"></td>'."\n" ;
print ' <td colspan="2" nowrap background="http://www.laolaweb.com.ar/bordes_arriba.gif">&nbsp;</td>'."\n" ;
print ' <td width="20"><img src="http://www.laolaweb.com.ar/esquina_sup_derecha.gif" width="19" height="20"></td>'."\n" ;
print " </tr>\n" ;
print " <tr> \n" ;
print ' <td rowspan="18" width="20" background="http://www.laolaweb.com.ar/bordes_izq.gif">&nbsp;</td>'."\n" ;
print ' <td colspan="2" rowspan="18" align="center" class="unnamed1" valign="top"> '."\n" ;
print ' <table width="480" border="0" cellspacing="0" cellpadding="0">'."\n" ;
print " <tr> \n" ;
print ' <td rowspan="2" width="1">&nbsp;</td>'."\n" ;
print ' <td width="100" nowrap align="center"> '."\n" ;
print ' <div align="center"><font face="Tahoma" size=1 color="#ffffff"><b><font color="#CCCCCC" face="Arial, Helvetica, sans-serif"> '."\n" ;
print ' </font><font face="Arial," size=1 color="#000000" helvetica,="undefined" sans-serif="undefined"><a href="http://www.laolaweb.com.ar"><img src="http://www.laolaweb.com.ar/marca_laola.gif" width="100" height="40" border="0"></a></font></b></font></div>'."\n" ;
print " </td>\n" ;
print ' <td colspan="2" nowrap bgcolor="#000066" valign="top"> '."\n" ;
print ' <div align="right"></div>'."\n" ;
print " </td>\n" ;
print " </tr>\n" ;
print " <tr> \n" ;
print ' <td width="100" nowrap align="center"> '."\n" ;
print ' <div align="center"><font face="Arial, Helvetica, sans-serif" size="2" color="#CCCCCC">web '."\n" ;
print " &amp; design</font></div>\n" ;
print " </td>\n" ;
print ' <td colspan="2" nowrap>&nbsp; </td>'."\n" ;
print " </tr>\n" ;
print " <tr> \n" ;
print ' <td width="1">&nbsp;</td>'."\n" ;
print ' <td colspan="3" nowrap> '."\n" ;
print ' <div align="center"><img name="Image14" src="http://www.laolaweb.com.ar/linea.gif" width="475" height="5"></div>'."\n" ;
print " </td>\n" ;
print " </tr>\n" ;
print " </table>\n" ;
print ' <table border="0" cellspacing="0" cellpadding="0" width="450">'."\n" ;
print " <tr> \n" ;
print ' <td colspan="5"> '."\n" ;
print " <blockquote> \n" ;
print ' <p align="center"><font color="#FFFFFF" size="4" face="Arial, Helvetica, sans-serif">Gracias '."\n" ;
print ' <font size="5"><b><font size="4">'.$nombre.'</font></b></font> </font></p>'."\n" ;
print ' <p align="center"><font color="#FFFFFF" size="4" face="Arial, Helvetica, sans-serif">por '."\n" ;
print " solicitar los productos de <i>La Ola</i></font></p>\n" ;
print ' <p align="center"><font color="#000000" size="3" face="Arial, Helvetica, sans-serif"><font size="5" color="#FFFFFF"><b>P</b></font><b><font color="#CCCCFF">ronto '."\n" ;
print ' recibirá un mensaje en <font color="#FFFFFF">'.$email.'</font> confirmando '."\n" ;
print " su pedido. Si no recibe dicha confirmación, puede ser que haya \n" ;
print ' escrito su dirección de <font color="#FFFFFF">correo electrónico</font> '."\n" ;
print " incorrectamente. Si esto sucede, por favor regrese a la página \n" ;
print " previa y re-envíe su información teniendo en cuenta que algunos \n" ;
print " datos son requeridos para procesar su inquietud.</font></b></font></p>\n" ;
print ' <p align="center"><font color="#000000" size="3" face="Arial, Helvetica, sans-serif"><font color="#CCCCFF">O '."\n" ;
print ' escr&iacute;banos un email a </font><font color="#000000" size="3" face="Arial, Helvetica, sans-serif"><font color="#CCCCFF"><b><a href="mailto:[email protected]">[email protected] om.ar</a></b></font><b></b></font><b><br>'."\n" ;
print " </b></font></p>\n" ;
print ' <p align="right"><font face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF" size="2"> '."\n" ;
print ' </font><font face="Arial, Helvetica, sans-serif" size="2" color="#CCCCFF"><a href="http://laolaweb.com.ar">ir '."\n" ;
print " a la P&aacute;gina Principal</a></font></p>\n" ;
print " </blockquote>\n" ;
print " </td>\n" ;
print " </tr>\n" ;
print " </table>\n" ;
print " </td>\n" ;
print ' <td rowspan="18" width="20" background="http://www.laolaweb.com.ar/bordes_derecha.gif">&nbsp;</td>'."\n" ;
print " </tr>\n" ;
print " <tr> </tr>\n" ;
print " <tr> </tr>\n" ;
print " <tr> </tr>\n" ;
print " <tr> </tr>\n" ;
print " <tr> </tr>\n" ;
print " <tr> </tr>\n" ;
print " <tr> </tr>\n" ;
print " <tr> </tr>\n" ;
print " <tr> </tr>\n" ;
print " <tr> </tr>\n" ;
print " <tr> </tr>\n" ;
print " <tr> </tr>\n" ;
print " <tr> </tr>\n" ;
print " <tr> </tr>\n" ;
print " <tr> </tr>\n" ;
print " <tr> </tr>\n" ;
print " <tr> </tr>\n" ;
print " <tr> \n" ;
print ' <td width="20"><img src="http://www.laolaweb.com.ar/esquina_inferior_izquierda.gif" width="20" height="20"></td>'."\n" ;
print ' <td colspan="2" nowrap><img src="http://www.laolaweb.com.ar/marca_con_brillo.gif" width="480" height="20"></td>'."\n" ;
print ' <td width="20"><img src="http://www.laolaweb.com.ar/esquina_inferior_derecha.gif" width="20" height="20"></td>'."\n" ;
print " </tr>\n" ;
print "</table>\n" ;
print '<p align="center"><font color="#999999" face="Arial, Helvetica, sans-serif" size="1">La '."\n" ;
print " Ola, web &amp; design - Todos los derechos reservados</font></p>\n" ;
print "</body>\n" ;
print "</html>\n" ;

sub GetFormInput {

(*fval) = @_ if @_ ;

local ($buf);
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN,$buf,$ENV{'CONTENT_LENGTH'});
}
else {
$buf=$ENV{'QUERY_STRING'};
}
if ($buf eq "") {
return 0 ;
}
else {
@fval=split(/&/,$buf);
foreach $i (0 .. $#fval){
($name,$val)=split (/=/,$fval[$i],2);
$val=~tr/+/ /;
$val=~ s/%(..)/pack("c",hex($1))/ge;
$name=~tr/+/ /;
$name=~ s/%(..)/pack("c",hex($1))/ge;

if (!defined($field{$name})) {
$field{$name}=$val;
}
else {
$field{$name} .= ",$val";

#if you want multi-selects to goto into an array change to:
#$field{$name} .= "\0$val";
}


}
}
return 1;
}
__________________
www.laolaweb.com.ar
http://www.laolaweb.com.ar/marca_laola.gif
Gestión para la comercialización en la web
  #5 (permalink)  
Antiguo 16/09/2005, 09:43
Avatar de Twity  
Fecha de Ingreso: agosto-2002
Mensajes: 86
Antigüedad: 21 años, 8 meses
Puntos: 0
Hola MonoSwim
Gracias por tu respuesta, más arriba te puegué la rutina en cuestión.
Saludos
__________________
www.laolaweb.com.ar
http://www.laolaweb.com.ar/marca_laola.gif
Gestión para la comercialización en la web
  #6 (permalink)  
Antiguo 16/09/2005, 10:52
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Te recomiendo que uses el FormMail y no uno programado por tu mismo al menos que seas programador avanzado...Fijate que en el FAQ de este foro de CGI puse como hacer paraque solo se ejecute el script si está el formulario en tu dominio...

Saludos
__________________
Esteban Quintana
  #7 (permalink)  
Antiguo 16/09/2005, 11:01
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
http://www.forosdelweb.com/showpost....6&postcount=44

Saludos
__________________
Esteban Quintana
  #8 (permalink)  
Antiguo 17/09/2005, 07:42
 
Fecha de Ingreso: mayo-2003
Mensajes: 328
Antigüedad: 21 años
Puntos: 0
Cita:
Iniciado por Twity
$recip = "info\@laolaweb.com.ar" ;
Debido a esta variable eres mucho menos vulnerable, pues no tienen forma de cambiar a quien le mandan el mail, lo que puede pasar si usas el formmail.

Otras cosas que te recomiendo, usa el CGI.pm para recibir tus variables:

Código:
use CGI;

my $cgi = new CGI;
my %field = $cgi->Vars;
Ahora, si eres paranoico, puedes hacer varios cheques más, para estar seguro que todo este bien, por ejemplo, podrías checar la longitud de email:

Código:
die("El email parece ser incorrecto") if length($field{'email'}) > 80;
Viendo así rápido, debido a que tienes incializadas las variables que vas a usar, no creo que pueda servirle a un spammer para mandar sus mails.

Otra cosa que puedes hacer es poner un counter en el CGI, entonces checas el número de veces que el CGI se ha usado y lo comparas con la cantidad de mails que has recibido, si se ha usado más veces el CGI, entonces por ahí tienes un leak, y convendría que lo checaras.


SALUDOS
__________________
Uriel Lizama, Perl Developer

Aprende Perl en Perl en Español.
  #9 (permalink)  
Antiguo 19/09/2005, 09:53
Avatar de Twity  
Fecha de Ingreso: agosto-2002
Mensajes: 86
Antigüedad: 21 años, 8 meses
Puntos: 0
Gracias por tu atencion Kid pero me surjen mas dudas:

Donde coloco esto?

use CGI;

my $cgi = new CGI;
my %field = $cgi->Vars;

Por otra parte tengo otras rutinas cgi que envian un email a quien llena el formulario, o sea que la direccion de email esa es una variable. ¿pensas que ahi puede estar la vulnerabilidad que usan los spamers?

Desde ya muy agradecido. Saludos
__________________
www.laolaweb.com.ar
http://www.laolaweb.com.ar/marca_laola.gif
Gestión para la comercialización en la web
  #10 (permalink)  
Antiguo 19/09/2005, 10:09
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
use CGI;

my $cgi = new CGI;
my %field = $cgi->Vars;

El CGI es un módulo muy utilizado por los programadores PERL, lo podés conseguir obviamente en el cpan y leerte la documentación (muy grande y en inglés) en search.cpan.org

Eso lo tendrías que poner al inicio del script para hacer la carga de datos en tu variable %hash ...Toma los parámetros que te envian desde el fomulario y los carga en la variable %

Pues si, se tenés un formulario de invita a un amigo, pueden enviarle cualquier info a cualquiera...Checkea que se ejecute el script solamente desde tu sitio y no desde cualquier formulario !!!

Saludos
__________________
Esteban Quintana
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 13:30.