Prestashop – Bloquear clientes spam formulario registro

Un clásico en Prestashop. la llegada de altas de clientes spam. Empecemos con este pequeño artículo: Prestashop – Bloquear clientes spam formulario registro

Bien, hay varias maneras de evitar el spam de registro de usuarios en Prestashop. La primera y más usada es la instalación de Plugins que añade Captchas o que elimina estos usuarios spam. Pero no sabemos a qué es debido, que en muchas versiones, ésto no es suficiente. La ‘gente mala’ aprovecha algunos bugs de versiones de Prestashop.

Veamos una solución, que hemos probado y que a nosotros si que nos ha funcionado:

Hay que modificar dos ficheros con los siguientes códigos:

classes/Validate.php

Hay que añadir el siguiente código:

public static function esCorrectoNombreCliente($name){
  if ( preg_match(Tools::cleanNonUnicodeSupport('/www|http/ui'), $name) ){
    return false;
  } else {
    return preg_match(Tools::cleanNonUnicodeSupport('/^[^0-9!<>,;?=+()@#"°{}_$%:]*$/u'), stripslashes($name));
  }
}

Hemos creado una nueva función que valida lo que nos entra por el formulario de registro. Os aconsejo que si no entendéis la función preg_match(), no toquéis mucho.

/classes/Customer.php

Una vez, tenemos definida la función en la clase Validate, ahora vamos a modificar el código para que a la hora de validar el nombre y apellidos insertados en el formulario de alta, deban cumplir las reglas antes expuestas, o lo que es lo mismo, el nombre y apellidos sean revisadas por la función que hemos creado anteriormente. Buscar el siguiente código:

public static $definition = array(
         'table' => 'customer',
         'primary' => 'id_customer',
         'fields' => array(
             'secure_key' => array('type' => self::TYPE_STRING, 'validate' => 'isMd5', 'copy_post' => false),
             'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 255),
             'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 255),
             ...
         ),
);

Y lo cambiáis al siguiente:

public static $definition = array(
         'table' => 'customer',
         'primary' => 'id_customer',
         'fields' => array(
             'secure_key' => array('type' => self::TYPE_STRING, 'validate' => 'isMd5', 'copy_post' => false),
             'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'esCorrectoNombreCliente', 'required' => true, 'size' => 255),
             'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'esCorrectoNombreCliente', 'required' => true, 'size' => 255),
             ...
         ),
);

Fijaos que lo único que hacemos es cambiar la función que valida los campos lastname y firstname. Antes se utilizaba isName, y lo hemos cambiado por esCorrectoNombreCliente.

Esto da pie a que podamos modificar a nuestro gusto o necesidad la validación de los campos de registro. Ahora bien, como digo anteriormente, debéis dominar las expresiones regulares, o podéis crear sin querer un agujero de seguridad en vuestra tienda.

Con el cambio de estos dos ficheros, deberíais controlar el registro de usuarios.

Atención: este ejemplo está basado en la modificación de los ficheros que pertenecen al core. Esto no debe hacerse nunca. Debéis trabajar con los Override de Prestashop para no veros afectados en las futuras actualizaciones del motor. Este artículo debéis tomarlo como un ejemplo de qué debe hacerse, pero no cómo debe hacerse. Buscad información sobre cómo hacer Override en Prestashop y hacerlo de ese modo (no es muy complicado).

Espero que os sea de utilidad el artículo Prestashop – Bloquear clientes spam formulario registro.


Más información