How to Protect PrestaShop From Spambots

 

 

 

 PrestaShop 1.7.0.0 and higher.

1. Download CleanTalk API from Github.com.

 

2. Unzip the downloaded archive to your <root directory>/classes/. You will see the folder with the name "php-antispam-master". Rename it to "cleantalk".

 

3. Go to <root directory>/classes/cleantalk and open CleantalkValidate.php. Find string:

 

public static $access_key = 'your access key';

 

Enter your CleanTalk access key instead of  your access key:

 

public static $access_key = '123456';

 

4. To protect the registration form, go to classes/form/ and open CustomerForm.php.  

 

Paste the following code at the beginning (after <?php):

 

<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/classes/cleantalk/CleantalkValidate.php';

 

Paste the following code in the validate section (after $this->validateByModules();):

 

    $spamCheckResult = CleantalkValidate::spamCheckUser($customer->firstname.' '.$customer->lastname, $customer->email);
    if ($spamCheckResult->allow == 0)
        $emailField->addError($this->translator->trans(
            $spamCheckResult->comment, array(), 'Shop.Notifications.Error'
        ));

 

5. Use the blacklisted e-mail stop_email@example.com to register. As a result, you will see the blocking message. 

 

6. To protect contact form, go to <root directory>/modules/contactform and open contactform.php

 

Paste the following code at the beginning (after <?php):

 

<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/classes/cleantalk/CleantalkValidate.php';

 

Paste before

$customer = $this->context->customer;

 

the following code:

        $spamCheck = CleantalkValidate::spamCheckMessage('', trim(Tools::getValue('from')), $message);
        if ($spamCheck->allow == 0) {
            $this->context->controller->errors[] = $this->trans(
                $spamCheck->comment,
                [],
                'Shop.Notifications.Error'
            );
        }

 

It will look something like this:

 

...
    } else {
        $spamCheck = CleantalkValidate::spamCheckMessage('', trim(Tools::getValue('from')), $message);
        if ($spamCheck->allow == 0) {
            $this->context->controller->errors[] = $this->trans(
                $spamCheck->comment,
                [],
                'Shop.Notifications.Error'
            );
        }
        $customer = $this->context->customer;
...

 

For old versions (older than 1.7.0.0) steps 1-3 will be the same.

 

4. To protect the registration form, go to <root directory>/controllers/front and open AuthController.php.  

 

Paste the following code at the beginning (after <?php):

 

<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/classes/cleantalk/CleantalkValidate.php';

 

Paste after this line (#442):

if (!count($this->errors)) {

 

the following code:

 

    $spamCheckResult = CleantalkValidate::spamCheckUser($customer->firstname.' '.$customer->lastname, $customer->email);
    if ($spamCheckResult->allow == 0)
    {
        $this->errors[] = Tools::displayError('User forbidden. Reason: '.$spamCheckResult->comment);
    }

 

  5. To protect comments, go to <root directory>/modules/productcomments/controllers/front/ and open default.php.

 

Paste the following code at the beginning (after <?php):

 

<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/classes/cleantalk/CleantalkValidate.php';

 

Paste the following code:

 

    $spamCheckResult = CleantalkValidate::spamCheckUser($customer->firstname.' '.$customer->lastname, $customer->email);
    if ($spamCheckResult->allow == 0)
    {
        $this->errors[] = Tools::displayError('User forbidden. Reason: '.$spamCheckResult->comment);
    }

 

After this line (#70):

$errors = array();

Notice: to protect comments, you need to have this module installed in your prestashop directory.

 

 6. To protect newsletter sign-ups, go to <root directory>/modules/blocknewsletter/ and open blocknewsletter.php.
 

 

Paste the following code at the beginning (after <?php):

 

<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/classes/cleantalk/CleantalkValidate.php';

 

Paste the following code at the top of the newsletterRegistration() function:

 

    $spamCheckResult = CleantalkValidate::spamCheckUser($customer->firstname.' '.$customer->lastname, $customer->email);
    if ($spamCheckResult->allow == 0)
    {
        $this->errors[] = Tools::displayError('User forbidden. Reason: '.$spamCheckResult->comment);
    }

 

 


Perhaps it would also be interesting