Foros del Web » Programando para Internet » PHP »

Evitar Spam en Formularios de Contacto

Estas en el tema de Evitar Spam en Formularios de Contacto en el foro de PHP en Foros del Web. Me tomo la libertad de abrir un nuevo tema para tratar el asunto del thread http://www.forosdelweb.com/showthread.php?t=357765 tal como sugirió DarioDario El Spam a través de ...
  #1 (permalink)  
Antiguo 16/12/2005, 20:40
 
Fecha de Ingreso: junio-2004
Mensajes: 37
Antigüedad: 13 años, 6 meses
Puntos: 0
Evitar Spam en Formularios de Contacto

Me tomo la libertad de abrir un nuevo tema para tratar el asunto del thread http://www.forosdelweb.com/f18/seguridad-anti-spam-357765/ tal como sugirió DarioDario
El Spam a través de la función mail de php parece estar de moda, buscando en Internet me he encontrado incluso con algunas empresas que han deshabilitado la opción desde php hasta no corregir el problema.

Y mi consulta es de ignorante, ya que tengo varios formularios que hice hace mucho tiempo alojados en distintos sitios y también recibí el famoso mensaje al que hacen mención en http://www.forosdelweb.com/showthread.php?t=357765

Bien, allí citan un ejemplo de como ingresaría los datos un spammer en el campo email; pruebo hacerlo y no funciona, quizás se deba a que el ejemplo es incorrecto o a que mis formularios son "inmunes".

De todas formas, me gustaría implementar un sistema de validación en PHP ya que el Javascript que utilizo es facilmente vulnerable.

Y como se que no soy el único aprendiz en esto me gustaría que pudiéramos desarrollar a fondo este tema para evitar que a muchos nos cierren la cuenta o inhabiliten la funcion mail.

Para empezar comienzo con mi caso

Mi formulario consta de 2 partes, el ingreso de datos se hace desde una página en html que lo pasa a una PHP; envío el código de esta última y pegunto como implementar un sistema de validación similar al citado en http://www.forosdelweb.com/showthread.php?t=357765

<? echo $nombre; ?>, gracias
por habernos contactado.
En breve le responderemos a <? echo $email; ?>

<?
// Enviar datos por e-mail
$contenido = "Comentarios enviados por " . $nombre . " \n";
$contenido .= "Nombre: " . $nombre . "\n";
$contenido .= "E-mail: " . $email . "\n";
$contenido .= "Comentarios: " . $comentarios . "\n";

$headers .= "From: $email \r\n";
$headers .= "Bcc: Yo <[email protected]>\r\n";
mail ("[email protected], [email protected]", "Comentarios", $contenido, $headers);
?>

Gracias
Dieter.

Estoy de acuerdo con la idea de javifo, incluso podría hacerse mas simple, evitando que en el campo mail aparezcan la coma o punto y coma, pero no estoy seguro de si es solamente desde ese campo que se puede introducir el código.
  #2 (permalink)  
Antiguo 17/12/2005, 01:31
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 13 años, 7 meses
Puntos: 0
Repito lo escrito en el otro post, porque no sé cual va a continuar.

Hola.

Desde luego, la solución de poner maxlength en el campo mail, como dije ayer, funciona si el intento de abuso se hace desde la página. En este caso, se corta la cadena al número de caracteres que haya predeterminados y el script de envío se ejecutaría enviando el email a una dirección que no existe.

Eso si no hay validación en el script de envío. Si la hay y está bien, ni se enviaría. Daría error.

Otra cuestión es si el form lo envían desde otra página. En este caso, el maxlength no actuaría como es obvio y si no hay verificación del lado servidor (en el script de envío), entonces sí que se ejecutaría y se enviaría el spam.
Me parece de todas formas que es este caso el tiempo de ejecución del script, actuaría. (no estoy seguro).

La solución en todo caso es sencilla:

- Control del campo mail del lado servidor antes de ejecutar el script con:

*verificación de la expresión regular que llega del campo mail.
*limitación del número de caracteres que llegan.
*verificación de que lleguen de la página donde tenemos el form.

Es decir, poniendo toda la seguridad del lado servidor.

Yo lo veo así, pero más opiniones serían muy interesantes.

Saludos.
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 21:58.