¿Cómo evitar el spam ruso en tu Prestashop?

Si estás cansado de recibir spam con el dominio @mail.ru u otros dominios sospechosos, en este artículo te explicamos una forma sencilla de solucionarlo. En pocos pasos conseguirás parar este tipo de correos.

Este tipo de correos suele llegar a través del formulario de contacto. Veremos como solucionar el problema en ambos casos.

Después de cada cambio que se haga siguiendo estos pasos hay que vaciar la cache de Prestashop para que los cambios tengan su efecto.

1. Dar de alta el sitio web en el servicio reCaptcha de Google

Entramos a la dirección https://www.google.com/recaptcha/intro/index.html con una cuenta nuestra de Google. Una vez dentro registramos el dominio de nuestra tienda online.

Después de registrar el dominio, nos apuntaremos las claves pública y privada que nos habrá ofrecido Google.

 

2. Modificamos  el fichero contact-form.tpl

Accedemos al fichero contact-form.tpl que se encuentra ubicado en la carpeta themes de nuestro Prestashop y añadimos el siguiente código:

Al inicio del fichero

<script src='https://www.google.com/recaptcha/api.js'></script>

Dentro de las etiquetas <form>, en el lugar que queramos, añadir el recaptcha:

<div class="form-group">
    <div class="g-recaptcha" data-sitekey=“PUBLIC_KEY_GOOGLE”></div>
</div>

Modificamos “PUBLIC_KEY_GOOGLE” por la clave publica que nos ofrece Google.

3. Creamos el fichero ContactController.php

Nos vamos a la carpeta overrides/controllers/front y creamos el fichero ContactController.php con el siguiente código:

<?php
/*
* 2018 Morethanweb
*
* RECAPTCHA
*/

class ContactController extends ContactControllerCore {
	
	public function postProcess()
	{
		if (Tools::isSubmit('submitMessage'))
		{
			if (Tools::getIsset('g-recaptcha-response') && !$this->validateCaptcha()){
				$this->errors[] = Tools::displayError('Captcha no verificado');
				array_unique($this->errors);
			}else{
				parent::postProcess();
			}
		}
	}
	
	private function validateCaptcha(){
		$post_data = http_build_query(
			array(
				'secret' => “SECRET_KEY_GOOGLE”,
				'response' => Tools::getValue('g-recaptcha-response'),
				'remoteip' => $_SERVER['REMOTE_ADDR']
			)
		);
		$opts = array('http' =>
			array(
				'method'  => 'POST',
				'header'  => 'Content-type: application/x-www-form-urlencoded',
				'content' => $post_data
			)
		);
		$context  = stream_context_create($opts);
		$response = file_get_contents('https://www.google.com/recaptcha/api/siteverify', false, $context);
		$result = json_decode($response);
		
		if (!$result->success) {
			return false;
		}
		
		return true;
	}
}

Modificamos “SECRET_KEY_GOOGLE” por la clave privada que nos ofrece Google.

Con este código ya debería hacer la validación del recaptcha antes que ninguna otra cosa. Vamos al formulario y comprobamos que es así dándole al botón de enviar con el formulario vacío.

4. Añadimos una clave de seguridad asociada a nuestro Prestashop

De nuevo modificamos el fichero contact-form.tpl y le añadimos una clave extra de seguridad que esté asociada a nuestro Prestashop, de esta manera el spameador no podrá usarlo de forma repetitiva. Este código tiene que ir justo después de la etiqueta <div class=“submit”>.

<input type="text" name="url" value="" class="hidden" />
<input type="hidden" name="contactKey" value="{$contactKey}" />

5. Modificamos el fichero /controllers/front/ContactController.php

Añadimos las líneas que están con un (+) y eliminamos las líneas que están con un (-) como indica en la imagen que hay a continuación:

Estas últimas modificaciones ya van incluidas a partir de Prestashop 1.6.1.17

 

Con estos sencillos pasos liberamos a nuestro Prestashop de recibir Spam ruso y de direcciones sospechosas. Se recomienda también desinstalar el módulo Send to a friend que también es un foco de spam.