CONTACTAR.PHP
Código PHP:
session_start();
require_once("conexion.php");
require_once("funciones/funciones.php");
$titulo = $_POST["titulo"];
$nombre = $_POST["nombre"];
$email = $_POST["email"];
$email2 = $_POST["email2"];
$emailorigen = $_POST["emailorigen"];
$tfno = $_POST["tfno"];
$comentarios = $_POST["comentarios"];
$idanuncio=$_POST["anuncio"];
$pregunta=$_POST["pregunta"];
$num1=$_POST["pregunta1"];
$num2=$_POST["pregunta2"];
$resultadopreg=$num1 + $num2;
$tituloseo=convertir_seo(limpiar_especiales($titulo));
//SE HACE PARA EVITAR QUE ACCEDAN SIN ENLAZAR DESDE EL FORMULARIO.
if (empty($_POST["titulo"]))
{
header("Location:index.php");
}
if (isset($_POST))
{
if($_POST["asunto"]!="") //Si se ha rellenado el campo oculto puede significar que halla sido rellenado por un robot que manda spam
{
?>
<script type="text/javascript">
alert('No se permiten mensajes de Spam');
history.back();
</script>;
<?php
mysql_close($conexion);
exit;;
}else{
if($pregunta!=$resultadopreg)
{
?>
<script type="text/javascript">
alert('El resultado de la suma no coincide');
history.back();
</script>;
<?php
mysql_close($conexion);
exit;
}
validarhacking($titulo);
validarhacking($nombre);
validarhacking($email);
validarhacking($email2);
validarhacking($tfno);
validarhacking($comentarios);
esSpam($titulo);
esSpam($nombre);
esSpam($comentarios);
$ip=getRealIP();
$fechahoy = date("Y-m-d");
$hora = date("H:i:s",time());
$horasegundos = time();
$sumahora=date("Y-m-d H:i:s",$m=strtotime('+5 minutes'));
$sql="select * from baneo where baneado='si' and ip_ban='$ip'"; //Selecionamos los registros que estan baneados
$datos=mysql_query($sql);
while ($row=mysql_fetch_assoc($datos)) //Los guardamos en variables
{
$diafecha=$row['fecha'];
$horainicial=$row['hora_ini'];
$horafinal=$row['hora_fin'];
$ipbaneada=$row['ip_ban'];
if (($fechahoy == $diafecha && $hora > $horafinal) || ($fechahoy > $diafecha)) //Si la fecha es la actual y la hora actual es mayor que la del baneo quitamos el ban
{ // También quitamos el ban si la fecha no es la actual, puesto que es una pasada y el ban
$sql="update baneo set baneado='no' where ip_ban='$ip'"; // es por unos minutos
mysql_query($sql) or die("Problemas en la actualizacion de registros".mysql_error());
}
}
$sql="select fecha, hora_fin from baneo where baneado='no' and ip_ban='$ip';"; // Seleccionamos los registros que se les quito el ban
$datos=mysql_query($sql) or die("Problemas en la seleccion ".mysql_error());
while ($row=mysql_fetch_assoc($datos)) //Los guardamos en variables
{
$fechabaneono=$row['fecha'];
$horafinalno=$row['hora_fin'];
}
//SELECCIONAMOS LAS BANEADAS PARA NO DEJARLES ENVIAR EL FORMULARIO DE CORREO
$sql_baneadas="select ip_ban from baneo where ip_ban='$ip' and baneado ='si'";
$datos=mysql_query($sql_baneadas) or die("Problemas al sacar listado ".mysql_error());
while ($row=mysql_fetch_assoc($datos))
{
$ipbaneada=$row["ip_ban"];
if($ip==$ipbaneada)
{
?>
<script type="text/javascript">
alert('Has realizado muchos envios en muy poco tiempo. Tendras que esperar un tiempo a que se te quite el baneo');
history.back();
</script>;
<?php
mysql_close($conexion);
exit;
}
}
if ($_SESSION["fallo"]>2)
{
?>
<script type="text/javascript">
alert('Comuniquese con el anunciante de la manera ordinaria');
window.location='http://192.168.1.128/anunciopc/<?php echo $idanuncio;?>/<?php echo convertir_seo(limpiar_especiales($titulo));?>.html'
</script>
<?php
mysql_close($conexion);
exit();
}
//Para el envío en formato HTML. Le damos la suficiente información para que no vaya a la carpeta de Spam del destinatario
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: $nombre <$email> \r\n";
$headers .= "Return-path: $nombre <$email> \r\n";
$headers .= "X-Priority: 1 \r\n";
$headers .= "X-MSMail-Priority: High \r\n";
$headers .= "X-Mailer: PHP/".phpversion()." \n";
//dirección de respuesta, si queremos que sea distinta que la del remitente
$headers .= "Reply-To:".$email;
$msj="Este es un mensaje de $nombre en referencia al artículo que publicaste en www.dominio.es<br/>";
$msj.="<br/><a href='http://192.168.1.128/anuncio/$idanuncio/$tituloseo.html'>Puede ver el anuncio aquí</a>";
$msj.=$comentarios;
@$enviado = mail($emailorigen,$titulo,$msj,$headers);
if ($enviado)
{
unset($_SESSION["emailnuevo"]);
//Procedemos a insertar los datos del usuario que trata de enviar un mail mediante el formulario
$sql="insert into guardar_contactar(id_contactar, id_anuncio, Nombre, email, ip, fecha, hora) values('','$idanuncio', '$nombre', '$email','$ip',now(),now())";
$insertar=mysql_query($sql)or die(mysql_error());
if (isset($horafinalno)) // Si existe significa que se baneo con anterioridad y hay un registro con la fecha y la hora del baneo y cuando expira
{
if ($fechabaneono==$fechahoy)
{ //Al ser la fecha de baneo del dia actual hay que coger las del usuario que envia el formulario de correo
//en el dia actual pero, que sean mayores a la hora de baneo ya que queremos resetar el contador
$sql="select id_contactar, ip from guardar_contactar where fecha='$fechahoy' and ip='$ip' and hora>'$horafinalno';";
echo $sql;
}else{ //Aqui seleccionamos todas las registradas en la fecha actual pertenecientes a la ip registrada al enviar el formulario
$sql="select id_contactar, ip from guardar_contactar where fecha='$fechahoy' and ip='$ip'";
}
}else{ //Si no existe nos limitamos a ver los registros de los envios que el usuario ha hecho
$sql="select id_contactar, ip from guardar_contactar where fecha='$fechahoy' and ip='$ip'";
}
$datos=mysql_query($sql) or die("Probelmas en la consulta".mysql_error());
while ($row=mysql_fetch_assoc($datos))
{
$idcontactar=$row['id_contactar'];
$ipanuncio=$row['ip'];
}
if (mysql_num_rows($datos) == 0)
{
echo "Fallo";
}
$registros=mysql_num_rows($datos); //Guardamos los envios del usuario en un contador
echo $registros;
if ($registros > 25)
{
echo("<script> alert('¡Ya has realizado más de 25 envios! Estas baneado durante un tiempo');
</script>");
$horafin = $horasegundos + (60 *60 * 1/2);
$horafin=date('H:i:s', $horafin);
$sql="select baneado from baneo where ip_ban = '$ipanuncio' and baneado='si'"; //Comprobamos que el usuario (IP) no este ya baneado
$datos=mysql_query($sql) or die("Problemas en el select".mysql_error());
if (mysql_num_rows($datos) == 0) //Si el usuario no esta baneado con anterioridad se crea el baneo
{
$sql="insert into baneo(idban_contactar, fecha, hora_ini, hora_fin, ip_ban, baneado) values ('$idcontactar', '$fechahoy', '$hora', '$horafin', '$ipanuncio', 'si')";
mysql_query($sql) or die("Problemas en el insert ".mysql_error());
}
}
//AQUI LO QUE HACEMOS ES UN CONTADOR DE SESIONES. SIMPLEMENTE ES UNA MEDIDA ADICCIONAL AL CONTADOR DE REGISTROS POR BASE DE DATOS
if (isset($_SESSION["contanuncio"]))
{
if($hora<$_SESSION["horamascinco"]) // Mientras no pase de cinco minutos seguimos sumando los envios
{
$sql="select id_anuncio, ip, fecha, hora from guardar_contactar where id_anuncio='$idanuncio' and ip='$ip' and fecha='$fechahoy' and hora<'$horamascinco'";
$datos=mysql_query($sql) or die("Problemas en el select".mysql_error());
$_SESSION['contanuncio']++;
}
if($hora>$_SESSION["horamascinco"]) //Si la hora es mayor que hora más cinco minutos quiere decir que ya ha pasado el tiempo de baneo y ponemos el contador a 1
{
$_SESSION["horamascinco"]=date("H:i:s",$m=strtotime('+5 minutes'));
$_SESSION["contanuncio"]='1';
}
}else{ //Creamos un contador de sessiones y otra sesion para sumar cinco minutos a la hora en la que el usuario mando el formulario
$_SESSION["contanuncio"]=1;
$_SESSION["horamascinco"]=date("H:i:s",$m=strtotime('+5 minutes'));
}
//SI EL CONTADOR SOBREPASA CIERTA CANTIDAD (ENVIOS DE MAIL POR FORMULARIO) Y LA HORA ACTUAL ES MENOR QUE LA HORA SUMADA (CINCO MINUTOS MAS)
//SE PROCEDE A BANEAR AL USUARIO DURENTE UN TIEMPO DETERMINADO (CINCO MINUTOS EN ESTE CASO)
if (($_SESSION["contanuncio"] > 4) && ($_SESSION["contanuncio"] < 7) && ($hora < $sumahora))
{
echo("<script> alert('¡Ya has enviado $_SESSION[contanuncio] emails en menos de cinco minutos¡');
</script>");
}
if (($_SESSION["contanuncio"] > 6) && ($hora < $sumahora))
{
echo("<script> alert('Detectado envio masico de emails.No puedes enviar mas emails hasta que pasen al menos cinco minutos');
</script>");
$horafin = $horasegundos + (60 *60 * 1/12);
$horaf=date('H:i:s', $horafin);
echo "<br>";
$sql="select baneado from baneo where ip_ban = '$ipanuncio' and baneado='si'"; //Comprobamos que el usuario (IP) no este ya baneado
$datos=mysql_query($sql) or die("Problemas en el select ".mysql_error());
if (mysql_num_rows($datos) == 0) //Si el usuario no esta baneado con anterioridad se crea el baneo
{
$sql="insert into baneo(idban_contactar, fecha, hora_ini, hora_fin, ip_ban, baneado) values ('$idcontactar', '$fechahoy', '$hora', '$horaf', '$ipanuncio','si')";
//echo $sql;
mysql_query($sql) or die("Problemas en el insert ".mysql_error());
}
}
?>
<script type="text/javascript">
alert('Se envió correctamente el formulario');
window.location='http://192.168.1.128/anunciopc/<?php echo $idanuncio;?>/<?php echo convertir_seo(limpiar_especiales($titulo));?>.html'
</script>
<?php
}else{
echo $_SESSION["fallo"]++;
echo("<script> alert('Falló el envio del email. Inténtelo más tarde.');
history.back();
</script>");
}
}
}
?>