cakephp funcion para bloquear ips y evitar spam

En este post voy a explicar como hacer una función que bloquea ips de robots o simples usuarios spammers.
Para esto mezclaremos la utilización de archivos de configuración donde iremos registrando en un array las ips que queremos bloquear.

Lo primero es crear un archivo de configuración que podrá ser utilizado desde cualquier parte de la aplicación.
En este archivo de configuración crearemos una variable que contendrá un array con registros de ips.
/app/config/ip_block.php

<?php
$config['Ip']['block'] = array('xxx.xxx.xxx.xxx');
?>

Esta funcionalidad es ideal para ir insertando las ips manualmente, previo análisis.

A continuación la función con la lógica que procesa la ip y las busca en el array de ips bloqueadas que hemos definido anteriormente en el archivo de configuración.

lo ideal será colocarla en /app/controllers/app_controller.php

<?
 class AppController extends Controller 
 {
    
    function __construct()
    {
        parent::__construct();
    }
    
    /**
    * funcion para bloquear ips.
    * Esta funcion se puede llamar desde cualquier funcion/controlador para comprobar si una ip está bloqueada.
    * Las ips bloqueadas se guardan en un array en /app/config/ip_block.php
    * La funcion simplemente carga el archivo de configuración y le las ips que hay registradas y las comprueba con la ip que enviamos
    * Si la ip coincide redirigimos a la home o donde queramos.
    * Esta funcion se puede usar en una determinada accion o en un controlador entero incluyéndola en el beforeFilter.
    * 
    * 
    * @param mixed $ip que estamos comprobando
    * @version 1.0
    * @author Pedro Ventura 
    */
    function comprobar_ip_block($ip)
    {
        Configure::load('ip_block');
        $array_ips_bloqueadas = Configure::read('Ip');
        /** 
        * Formato del array devuelto
        *
        * [block] => Array
                (
                    [0] => xxx.xxx.xx.xxx
                    [1] => xx.xx.xxx.xx
                )
        */
        if(in_array($ip,$array_ips_bloqueadas['block']))
        {
            #ip bloqueada
            $this->Session->setFlash(__("Tu ip ha sido bloqueada para realizar esta accion",true));
            $this->redirect(array('controller'=>'mi_controller','action'=>'index'));
        }
        
    }
}
?>

Podemos usar la función anterior llamándola desde cualquier otra función ya que se encuentra en el app_controller.php o incluso para restringir el acceso a un determinado controlador a usuarios spam o a robots que previamente hemos sacado sus ips y añadido en el archivo de configuración, para ello bastaría con añadirlo a la función beforeFilter del controlador.
Si lo que queremos es bloquear las ips a toda la aplicación habrá que añadir la llamada a la función en el beforeFilter del app_controller.php

function beforeFilter()
  {
        parent::beforeFilter();
       $this->comprobar_ip_block($_SERVER['REMOTE_ADDR']);
  }

Una respuesta a “cakephp funcion para bloquear ips y evitar spam”

  1. Pingback: CAPTCHA: Cuando la Seguridad Atenta Contra la Accesibilidad « Informática y Accesibilidad para Todos

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *