Ver Mensaje Individual
  #8 (permalink)  
Antiguo 03/10/2011, 06:31
mitrofan
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 14 años
Puntos: 13
Respuesta: Restringir uso de pagina PHP

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>"
);
        }
    }

}

?>