Foros del Web » Programando para Internet » PHP »

Formulario PHP abusado x Spammer no me premite recibir msjs de visitantes de mi sitio

Estas en el tema de Formulario PHP abusado x Spammer no me premite recibir msjs de visitantes de mi sitio en el foro de PHP en Foros del Web. Tengo un formulario de contacto en PHP , el cual esta siendo utilizado por un spammer . Al querer llenar mi propio formulario (simulando una ...
  #1 (permalink)  
Antiguo 21/08/2010, 16:25
 
Fecha de Ingreso: agosto-2010
Mensajes: 7
Antigüedad: 14 años, 3 meses
Puntos: 0
Formulario PHP abusado x Spammer no me premite recibir msjs de visitantes de mi sitio

Tengo un formulario de contacto en PHP, el cual esta siendo utilizado por un spammer.

Al querer llenar mi propio formulario (simulando una visita) y presionar "Enviar", me sale un msj del servidor (Dattatec):

Warning: mail() [function.mail]: SMTP server response: 554 Su dominio ha excedido el limite de 200 mails por hora. El envío de correo ha sido temporalmente suspendido. El mismo será reestablecido automáticamente en el transcurso de la próxima hora. in \\hmfsw\web\dtcwin079\xxxxxxxxx.com\public_html\se ndmail.php on line 158

Por lo tanto, no puedo recibir los msjs que dejan los visitantes!!

--------------------------------------------------------------------------------------------------------

Para solucionar este problema, hasta el momento probé:

- Cambiando la dirección de correo de recepción de los mensajes ([email protected] en lugar de [email protected])

- Cambiando la dirección de correo de recepción de los mensajes a una cuenta de Gmail ([email protected] en lugar de [email protected])

- Cambiando los nombres de los archivos del formulario (contacto2.php y sendmail2.php; en lugar de contacto.php y sendmail.php)

Con ninguna de estas modificaciones pude solucionarlo.

--------------------------------------------------------------------------------------------------------

En Dattatec, me dieron un SCRIPT para asegurar el formulario. El problema es que mis conocimientos de PHP son escasos, y no se exactamente como insertarlo. Además en Dattatec no dan soporte acerca de programación.

El Script es el siguiente:


<?php

function ValidarDatos($campo){

//Array con las posibles cabeceras a utilizar por un spammer

$badHeads = array("Content-Type:",

"MIME-Version:",

"Content-Transfer-Encoding:",

"Return-path:",

"Subject:",

"From:",

"Envelope-to:",

"To:",

"bcc:",

"cc:");



//Comprobamos que entre los datos no se encuentre alguna de

//las cadenas del array. Si se encuentra alguna cadena se

//dirige a una página de Forbidden

foreach($badHeads as $valor){

if(strpos(strtolower($campo), strtolower($valor)) !== false){

header("HTTP/1.0 403 Forbidden");

exit;

}

}

}



//Ejemplo de llamadas a la funcion

ValidarDatos($_POST['email']);

ValidarDatos($_POST['asunto']);

ValidarDatos($_POST['mensaje']);

?>
[/COLOR]


--------------------------------------------------------------------------------------------------------

El contenido (parcial) del archivo Contacto.php es:


<form method="post" action="sendmail.php">
<!-- DO NOT change ANY of the php sections -->
<?php
$ipi = getenv("REMOTE_ADDR");
$httprefi = getenv ("HTTP_REFERER");
$httpagenti = getenv ("HTTP_USER_AGENT");
?>
<div align="left">
<input type="hidden" name="ip" value="<?php echo $ipi ?>" />
<input type="hidden" name="httpref" value="<?php echo $httprefi ?>" />
<input type="hidden" name="httpagent" value="<?php echo $httpagenti ?>" />
</div>
<div class="Estilo4" id="denominacion"></div>
<div class="Estilo1" id="denominacion"> </div>
<div class="Estilo1" id="denominacion">
<table width="100%" height="458" border="0" cellspacing="0">
<!--DWLayoutTable-->
<tr>
<td width="613" height="337" align="left" valign="top"><p class="Estilo75"><span class="Estilo18">Mensaje:</span><span class="Estilo2 Estilo1 Estilo15 Estilo82"><em><strong><br>
<textarea name="nota" cols="84" rows="10" class="Estilo18" id="textarea6"></textarea>
<br>
</strong></em></span><span class="Estilo18"><br>
Nombre:</span><span class="Estilo2 Estilo1 Estilo15 Estilo82"><em><strong><br>
<input name="nombres" type="text" class="Estilo18" id="nombres3" size="40">
<br>
</strong></em></span><span class="Estilo18"><br>
E-mail:</span><span class="Estilo2 Estilo1 Estilo15 Estilo82"><em><strong><br>
</strong></em></span><span class="Estilo2 Estilo1 Estilo15"><em>
<input name="email" type="text" class="Estilo18" id="email2" size="40">
<br>
</em></span><span class="Estilo18"><br>
Localidad:<em></em></span><span class="Estilo2 Estilo1 Estilo15"><em><br>
<input name="localidades" type="text" class="Estilo18" id="localidades2" size="40">
<br>
<br>
<input name="Submit2" type="submit" class="titulo-form" id="Submit25" value="Enviar">
</form>


--------------------------------------------------------------------------------------------------------

El contenido (parcial) de sendmail.php es:



<?php
if(!$email == "" && (!strstr($email,"@") || !strstr($email,".")))
{
echo "<h3></h3>\n";
$badinput = "<h3>Su direcci&oacute;n electr&oacute;nica no es v&aacute;lida o est&aacute; mal escrita, reingr&eacute;sela por favor.</h3>\n";
}
if(empty($nombres) || empty($email)) {
echo "<h3>Ha dejado campos vac&iacute;os, s&iacute;rvase completarlos por favor.</h3>\n";
}

$todayis = date("l, F j, Y, g:i a") ;
$asunto = $asunto ;

$nota = stripcslashes($nota);

$message = " $todayis [EST] \n
- MENSAJE:
$nota \n
- ESCRIBE: $nombres ($email)\n
- LOCALIDAD: $localidades\n
- PAIS: $pais\n


";

$from = "From: $email\r\n";

mail("[email protected]", $subject, $message, $from);
?>
</strong>Vista previa de su Mensaje </h1>
<div class="clearFloat"></div>
</div>
<div id="Vista_Previa_Mensaje">
<div class="Txt_Mensaje_Nombre_E-Mail_Localidad">

<p>Mensaje: <strong>
<?php $notesout = str_replace("\r", "<br/>", $nota);echo $notesout; ?>
</strong></p>
<p>Nombre: <strong><?php echo $nombres ?></strong></p>
<p>E-Mail: <strong><?php echo $email ?></strong></p>
<p class="lastNode">Localidad: <strong><?php echo $localidades ?></strong></p>



--------------------------------------------------------------------------------------------------------


Aguardo comentarios.

Desde ya muchas gracias!!
  #2 (permalink)  
Antiguo 21/08/2010, 16:37
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 9 meses
Puntos: 177
Respuesta: Formulario PHP abusado x Spammer no me premite recibir msjs de visitantes

Ok tendrías que pegar arriba de todo en el archivo sendmail.php el codigo que te dieron y cambiar estas lineas

ValidarDatos($_POST['email']);
ValidarDatos($_POST['asunto']);
ValidarDatos($_POST['mensaje']);


por estas


ValidarDatos($_POST['nota']);
ValidarDatos($_POST['nombres']);
ValidarDatos($_POST['email']);
ValidarDatos($_POST['localidades']);
__________________
la la la
  #3 (permalink)  
Antiguo 21/08/2010, 16:46
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 11 meses
Puntos: 89
Respuesta: Formulario PHP abusado x Spammer no me premite recibir msjs de visitantes

Otra forma sería agregar un captcha. También, hay sitios que al querer buscar en su contenido, te pide un dato cualquiera, por ejemplo, la suma de 2 + 2, lo cual el bot, se supone, no podría solucionar. Tú podrías personalizar aquello.

Aquí hay un ejemplo sencillo de preguntas antibot : http://boozox.net/php/sencillo-siste...con-preguntas/

Bueno, es sencillo, pero quizá cumpla su cometido.

Espero te sirva de algo. Nos vemos.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #4 (permalink)  
Antiguo 21/08/2010, 17:39
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Formulario PHP abusado x Spammer no me premite recibir msjs de visitantes

aparte del captcha, trata de agregar protección CSRF

Etiquetas: recibir, formulario, visitante
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 20:17.