Foros del Web » Programando para Internet » PHP »

Restringir uso de pagina PHP

Estas en el tema de Restringir uso de pagina PHP en el foro de PHP en Foros del Web. Bueno he estado creando un script de registracion donde hay que rellenar campos y al enviar estos se mandan a un correo especifico, asi lo ...
  #1 (permalink)  
Antiguo 02/10/2011, 02:38
Avatar de Locky20  
Fecha de Ingreso: octubre-2011
Mensajes: 9
Antigüedad: 13 años, 1 mes
Puntos: 0
Restringir uso de pagina PHP

Bueno he estado creando un script de registracion donde hay que rellenar campos y al enviar estos se mandan a un correo especifico, asi lo solicitaron, todo esta hecho y funciona pero ahora me gustaria poder limitar el uso de ese php para que los "chistosos" no manden y manden formularios llenos de basura como "asdasdsa" entonces para parar esos posibles casos quisiera que al mandar 2 o 3 formularios se bloquee el acceso a esa ip o algo asi

creen que sea posible algo asi? o bueno acepto cualquier tipo de sugerencia

Salu2
  #2 (permalink)  
Antiguo 02/10/2011, 03:18
 
Fecha de Ingreso: agosto-2011
Ubicación: España
Mensajes: 445
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: Restringir uso de pagina PHP

Pues puedes utilizar IF y strlen para comprobar el número de caracteres que envian al formulario y si se cumple lo que pidas que lo añada al registro o no. Si por ejemplo el nombre es de menos de 2 caracteres y también la dirección está claro que no quieren registrarse realmente. También podrías comprobar si envian alguna parte del formulario vacío. Y ahora está muy de moda Captcha podrías añadir uno.

Última edición por Arkaitz; 02/10/2011 a las 03:26
  #3 (permalink)  
Antiguo 02/10/2011, 05:06
Avatar de gogupe  
Fecha de Ingreso: octubre-2006
Ubicación: Mallorca
Mensajes: 897
Antigüedad: 18 años, 1 mes
Puntos: 32
Respuesta: Restringir uso de pagina PHP

Podrías montarte un sistema de cookies para registrar la ip, o mediante una base de datos, pero sería algo mas complejo, si usas los captcha como ha dicho Arkaitz te será mucho mas fácil y mas claro en cuanto a código.

Saludos
  #4 (permalink)  
Antiguo 02/10/2011, 13:39
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 14 años, 5 meses
Puntos: 13
Respuesta: Restringir uso de pagina PHP

Entiendo lo que pides, la verdad es que es muy comprensible. No solo por los "graciosos", sino por los spamers. Se puede hacer perfectamente lo que pides. De hecho yo implemente un captcha (como ya te han sugerido) en plan básico con sumas de números, y un sistema similar al que pides con sesiones y combinadolo con registros de ip con fecha y hora del envio que se graban en una table de mysql, y luego iba comparando la ip con la fecha-hora de envio y si, por ejemplo contaba que había enviado más de 10 mails en cinco minutos bloqueaba la ip durante un tiempo determinado.
También se puede hacer solo con sesiones (más sencillo en principio), lo malo es que si el gracioso o spamer puede cerrar el navegador y al volver abrirlo se se crea otra sesion, aunque puedes utilizar cookies como te han sugerido.

Se puede hacer de muchas formas.
  #5 (permalink)  
Antiguo 02/10/2011, 17:11
Avatar de Locky20  
Fecha de Ingreso: octubre-2011
Mensajes: 9
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Restringir uso de pagina PHP

Gracias por las respuestas !

Cita:
registros de ip con fecha y hora del envio que se graban en una table de mysql, y luego iba comparando la ip con la fecha-hora de envio y si, por ejemplo contaba que había enviado más de 10 mails en cinco minutos bloqueaba la ip durante un tiempo determinado.
En general esto seria lo que quisiera hacer pero veo dificil que lo implemente yo solo si no veo algun prefabricado, lo estudie y lo adecue ya que soy bastante noob en php xD seria de gran ayuda si conocen algun prefabricado asi para comenzar a estudiarlo

tomare en cuenta tambien lo del captcha aunque para una persona real seria facil saltarselo, y no creo que funcione mucho el nº de caracteres en el campo por si el troll escribe mas "sadasdsad"

Salu2
  #6 (permalink)  
Antiguo 02/10/2011, 19:24
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 9 meses
Puntos: 89
Respuesta: Restringir uso de pagina PHP

Te doy un ejemplo y vos divertite....

formulario.html -> completo datos y voy a ---> formulario.php

en formulario.php
ante todo le pengo:

session_start();
Código PHP:
if(!isset($_SESSION['formulario']))
{
$_SESSION['formulario'] = '1';

//y tu codigo......
}else{
header"Location: no-enviaras.html");

Basicamente, inicias session con session_start();
consultas si la variable formulario esta setiada con isset();
si no lo esta, la setea, y te permite enviar el formulario.
si lo esta, te redirige a otra pagina.

Divertite esta bueno PHP. ( jajaj re politico)
__________________
Mono programando!
twitter.com/eguimariano
  #7 (permalink)  
Antiguo 03/10/2011, 06:27
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 14 años, 5 meses
Puntos: 13
Respuesta: Restringir uso de pagina PHP

Si quieres te posteo el mio para que te hagas una idea. Aunque supongo que se podrá hacer más simple e igual de efectivo. Pero bueno, aqui va:

Primeramente el formularioa para que te hagas una idea:

Código PHP:
session_start();
.
.
CODIGO QUE NO VIENE AL CASO
.
.
//AQUI EMPIEZA EL FORMULARIO
<?php
        
if ($_SESSION["fallo"]>2)
        {
        
$emailcodificado=codificador_hexa($email);    
        
?>
          <div>
        <p>Al no funcionar el formulario comunicate con el anunciante desde tu cliente de correo</p>
        <a href="mailto:<?php echo $emailcodificado;?>"><h3>Mada e-mail desde aquí</h3></a>
        </div>
        <?php
        
}
        
        
$num1=rand(1,20);
        
$num2=rand(1,20);
        
?>
        <form name="contactar" action="http://192.168.1.128/anunciopc/contactar.php" method="post">
        <fieldset id="cajacontacto">
          
            <legend  style="font-size:15; width:140px">CONTACTAR CON EL ANUNCIANTE</legend>
          
       
        <table align="center">    
          <tr>
            <td> T&iacute;tulo</td>
            </tr>
          <tr>
            <td><input type="text" name="titulo" maxlength="25" value="<?php echo $titulo;?>"  /></td>
            </tr>
            
            <tr>    
            <td><div id="titulo"> </div></td>
            </tr>
            
          </table>
          
          <table align="center">
          <tr>
            <td> Nombre </td>
            </tr>
          <tr>    
            <td><input type="text" name="nombre" value="<?php echo $nombre;?>"/></td>
            </tr>
            
            <tr>    
            <td><div id="nombre"> </div></td>
            </tr>
            
          </table>
          
          <table align="center">
          <tr>
            <td> Email </td>
            </tr>
          <tr>
            <td> <input type="text" name="email"  maxlength="25"/></td>
            </tr>
            
            <tr>    
            <td><div id="email"> </div></td>
            </tr>
            
            </table>
          
          <table align="center">
          <tr>
            <td>  Repita el email </td>
            </tr>
          <tr>
            <td> <input type="text" name="email2"  maxlength="25" onpaste="alert('No puedes pegar');return false"/></td>
            </tr>
            
            <tr>    
            <td><div id="email2"> </div></td>
            </tr>
            
            </table>
          
          <table align="center">
          <tr>
            <td> Tel&eacute;fono (optativo)</td>
            </tr>
          <tr>
            <td> <input type="text" name="tfno" maxlength="25"/></td>
            </tr>
            
            <tr>    
            <td><div id="tfno"> </div></td>
            </tr>
            
            </table>
          
          <table align="center">
          <tr align="center">
            <td align="center"> Comentarios </td>
            </tr>
                      
          <tr align="center">
            <td align="center"><textarea name="comentarios" rows="12" cols="20" style="overflow:hidden;" onkeydown="valida_longitud(document.forms[0].comentarios,num_caracteres_permitidos=150)" onkeyup="valida_longitud(document.forms[0].comentarios,num_caracteres_permitidos=150)"> </textarea></td>
            </tr>
            
           <tr>
            <td><div style="float:left">Caracteres:</div><div id="capa" style="float:left;">0</div></td>
           </tr>
            
            <tr>    
            <td align="left"><div id="comentarios"> </div></td>
            </tr>
          
          
          <tr>
              <td> <input type="text" name="asunto" id="asunto"/></td>
          </tr>
          
          <tr>
          <td> <input type="hidden" name="anuncio" value="<?php echo $idanuncio;?>"/></td>
          </tr>
          
          <tr>
            <td><div id="confirmar"> </div> </td>
        </tr>
        
          
          <tr>
            <td><input type="checkbox" name="confirmar"/> <a href="http://192.168.1.128/anunciopc/condiciones.html" target="_blank">Acepto las condiciones y t&eacute;rminos de uso y acceso</a></td>
        </tr>
            
          <tr>
            <td> Responde con un n&uacute;mero </td>
          </tr>
        
          <tr>
            <td> <strong> <?php ec
ho 
($num1);?> + <?php echo ($num2);?> </strong> <input type="text" size="8" name="pregunta" maxlength="2" /></td>
          </tr>
        
          <tr>
            <td><div id="pregunta"></div></td>
          </tr>
        
         <tr>
            <td> <input type="hidden" size="8" name="pregunta1" maxlength="2" value="<?php echo ($num1);?> "/></td>
         </tr>
   
            <tr>
            <td> <input type="hidden" size="8" name="pregunta2" maxlength="2" value="<?php echo ($num2);?>" /> </td>
         </tr>   
        
        </table>
            
            <input type="hidden" name="emailorigen" value="<?php echo $email?>"/>
          
          <table align="center">
          <tr>
            <td><input style="color:# 202020; background-color:#F90 font-size:16px; margin-left:25px; border:1px solid; font-style:italic" type="button" name="insertar"value="Enviar Anuncio" onclick="validar_contactar()" /></td>
            </tr>
        </table>
        </fieldset>
        
        </form>
  #8 (permalink)  
Antiguo 03/10/2011, 06:31
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 14 años, 5 meses
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>"
);
        }
    }

}

?>
  #9 (permalink)  
Antiguo 03/10/2011, 06:34
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 14 años, 5 meses
Puntos: 13
Respuesta: Restringir uso de pagina PHP

Pero antes de todo habría que crear las dos tablas en Mysql:

-- Estructura de tabla para la tabla `guardar_contactar`
--

CREATE TABLE IF NOT EXISTS `guardar_contactar` (
`id_contactar` int(9) NOT NULL auto_increment,
`id_anuncio` int(8) NOT NULL,
`Nombre` char(30) NOT NULL,
`email` varchar(35) NOT NULL,
`ip` varchar(15) NOT NULL,
`fecha` date NOT NULL,
`hora` time NOT NULL,
PRIMARY KEY (`id_contactar`),
KEY `id_anuncio` (`id_anuncio`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

--
-- Volcar la base de datos para la tabla `guardar_contactar`
--


--
-- Filtros para las tablas descargadas (dump)
--

--
-- Filtros para la tabla `guardar_contactar`
--
ALTER TABLE `guardar_contactar`
ADD CONSTRAINT `guardar_contactar_ibfk_1` FOREIGN KEY (`id_anuncio`) REFERENCES `articulo` (`idArticulo`) ON DELETE CASCADE ON UPDATE CASCADE;

Estructura de tabla para la tabla `baneo`
--

CREATE TABLE IF NOT EXISTS `baneo` (
`idban_contactar` int(8) NOT NULL,
`fecha` date NOT NULL,
`hora_ini` time NOT NULL,
`hora_fin` time NOT NULL,
`ip_ban` varchar(15) NOT NULL,
`baneado` char(2) NOT NULL,
KEY `idban_contactar` (`idban_contactar`),
KEY `ip_ban` (`ip_ban`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Volcar la base de datos para la tabla `baneo`
--


--
-- Filtros para las tablas descargadas (dump)
--

--
-- Filtros para la tabla `baneo`
--
ALTER TABLE `baneo`
ADD CONSTRAINT `baneo_ibfk_1` FOREIGN KEY (`idban_contactar`) REFERENCES `guardar_contactar` (`id_contactar`) ON DELETE CASCADE ON UPDATE CASCADE;

El campo id_anuncio hace referencia a otra tabla que no viene al caso, asi que se podría obviar.
Por lo demás hay un pequeño captcha de sumas (muy sencillo) y utilizo funciones como Validarhacking (que controlan que el usuario no intentente meter caracteres prohibidos para evitar inyección sql), esSpam (que simplemente controla que no se metan palabras típicas de spam como viagra u otras) y getRealIP para sacar la ip del usuario.
  #10 (permalink)  
Antiguo 03/10/2011, 06:41
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 14 años, 5 meses
Puntos: 13
Respuesta: Restringir uso de pagina PHP

Un ejemplo de como se rellenarían las tablas:

Ver Imagen: http://s2.subirimagenes.com/otros/previo/thump_6988748enviosmail.jpg

Aqui se registrarian las ips y otros datos de los usuarios que envian email usando el formulario.

Vemos claramente que hay un usuario que ha realizado muchos envios en muy poco espacio de tiempo.

Ver Imagen: http://s3.subirimagenes.com:81/otros/previo/thump_6988749tablabaneos.jpg

Asi que saldría baneado como apreciamos en la tabla baneo. En concreto se le banearía por cinco minutos, aunque esto siempre lo podríamos modificar desde el código.

De momento solo lo he probado en local y funciona.
  #11 (permalink)  
Antiguo 03/10/2011, 20:30
Avatar de Locky20  
Fecha de Ingreso: octubre-2011
Mensajes: 9
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Restringir uso de pagina PHP

Wow Muchisimas gracias voy a ponermelo a estudiar a ver si saco algo, de momento he implementado recaptcha creo q hara mas fastidioso que quieran hacer varios registros xD

de nuevo gracias por el code voy a comenzar a estudiarlo aparte que me gusta aprender de otros codes

Salu2
  #12 (permalink)  
Antiguo 04/10/2011, 08:18
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 14 años, 5 meses
Puntos: 13
Respuesta: Restringir uso de pagina PHP

De nada (aunque como no lo copie entero se me olvido el <?php del princpio). Supongo que igual es un poco enrevesado. Seguro que se puede simplificar y afinar todavía más. Pero bueno, la idea fundamental si quieres controlar más en serio a los usuarios es crear dos tablas, una para guardar los logs de los envios y otra para apuntar los baneados. Luego cuando pase x tiempo (que tal y como esta escrito el código, aunque puede cambiar facilmente, pueden ser 5 minutos si ha realizado más de 7 envios en menos de cinco minutos o media hora si ha contado más de 25 intentos) se vuelve a levantar el ban. Lo primero que se hace siempre es selecionar los resgitros de la tabla baneo donde el campo benado se igual a si y comprobar si ha pasado el tiempo del ban (que viene recogido en el campo fecha y en campo hora), en ese caso se pone el campo de la tabla baneo en baneado=no y se le deja enviar, sino se sigue mateniendo baneado=si y se le echa.

Lo único que los registros que vayan quedando viejos en las tablas habría que borrarlos a mano. Sería interesante hacer que se borrasen automáticamente pasado un tiempo para ahorrar espacio en disco.

Etiquetas: restringir, formulario
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 14:09.