Comment protéger PrestaShop des comptes clients spams ?

PrestaShop
  • Accueil
  • Blog
  • Comment protéger PrestaShop des comptes clients spams ?

Cela fait plusieurs jours déjà lorsque j’écris ce billet que je vois des boutiques PrestaShop subir le même sort : des attaques de spams avec à la clé des faux comptes clients spams du type www.cutt.us/… Voyons comment corriger le problème.

 

Comment stopper les clients spams dans PrestaShop ?

C’est LA question qui revient et voici comment y répondre.
Avant tout, c’est un tuto étape par étape issu du post de Doekia sur le forum PrestaShop visible ici : https://www.prestashop.com/forums/topic/981158-securite-spam-compte-client-solution-13-17/
 

Tuto pour stopper les spams clients dans PrestaShop 1.5 à 1.7

Etape 1 : éditez le fichier www/override/classes/Validate.php – le créer si il n’existe pas :

class Validate extends ValidateCore
{
    public static function isCustomerName($name)
    {
        if (preg_match(Tools::cleanNonUnicodeSupport('/www|http/ui'),$name)) {
            return false;
        }

        return preg_match(Tools::cleanNonUnicodeSupport('/^[^0-9!\[\]<>,;?=+()@#"°{}_$%:\/\\\*\^]*$/u'), $name);
    }
}

Etape 2 : éditez le fichier www/override/classes/Customer.php – le créer si il n’existe pas :
class Customer extends CustomerCore
{
    /**
     * @see ObjectModel::$definition
     */
    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' => 'isCustomerName', 'required' => true, 'size' => 32),
            'firstname' =>                    array('type' => self::TYPE_STRING, 'validate' => 'isCustomerName', 'required' => true, 'size' => 32),
            'email' =>                        array('type' => self::TYPE_STRING, 'validate' => 'isEmail', 'required' => true, 'size' => 128),
            'passwd' =>                    array('type' => self::TYPE_STRING, 'validate' => 'isPasswd', 'required' => true, 'size' => 32),
            'last_passwd_gen' =>            array('type' => self::TYPE_STRING, 'copy_post' => false),
            'id_gender' =>                    array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
            'birthday' =>                    array('type' => self::TYPE_DATE, 'validate' => 'isBirthDate'),
            'newsletter' =>                array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
            'newsletter_date_add' =>        array('type' => self::TYPE_DATE,'copy_post' => false),
            'ip_registration_newsletter' =>    array('type' => self::TYPE_STRING, 'copy_post' => false),
            'optin' =>                        array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
            'website' =>                    array('type' => self::TYPE_STRING, 'validate' => 'isUrl'),
            'company' =>                    array('type' => self::TYPE_STRING, 'validate' => 'isGenericName'),
            'siret' =>                        array('type' => self::TYPE_STRING, 'validate' => 'isSiret'),
            'ape' =>                        array('type' => self::TYPE_STRING, 'validate' => 'isApe'),
            'outstanding_allow_amount' =>    array('type' => self::TYPE_FLOAT, 'validate' => 'isFloat', 'copy_post' => false),
            'show_public_prices' =>            array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false),
            'id_risk' =>                    array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'copy_post' => false),
            'max_payment_days' =>            array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'copy_post' => false),
            'active' =>                    array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false),
            'deleted' =>                    array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false),
            'note' =>                        array('type' => self::TYPE_HTML, 'validate' => 'isCleanHtml', 'size' => 65000, 'copy_post' => false),
            'is_guest' =>                    array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false),
            'id_shop' =>                    array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'copy_post' => false),
            'id_shop_group' =>                array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'copy_post' => false),
            'id_default_group' =>            array('type' => self::TYPE_INT, 'copy_post' => false),
            'id_lang' =>                    array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'copy_post' => false),
            'date_add' =>                    array('type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_post' => false),
            'date_upd' =>                    array('type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_post' => false),
        ),
    );
}

Notez pour la déclaration de lastname et firstname la validation avec isCustomerName.
Pensez à bien supprimer le fichier www/cache/class_index.php pour que les overrides soient pris en compte.
C’est terminé !
 

Tuto pour stopper les spams clients dans PrestaShop 1.3 à 1.4

Note pour PrestaShop 1.3 : les overrides n’existant pas pour cette version, il faut travailler dans les fichiers classes originaux.
Etape 1 : modifiez le fichier www/override/classes/Validate.php – il faut créer le fichier si il n’existe pas :

class Validate extends ValidateCore
{
	public static function isCustomerName($name)
    {
        if (preg_match('/www|http/ui',$name)) {
        	return false;
        }

        return preg_match('/^[^0-9!\[\]<>,;?=+()@#"°{}_$%:\/\\\*\^]*$/u', $name);
    }
}

Etape 2 : modifiez le fichier www/override/classes/Customer.php – il faut créer le fichier si il n’existe pas :
class Customer extends CustomerCore
{
    protected $fieldsValidate = array('secure_key' => 'isMd5', 'lastname' => 'isCustomerName', 'firstname' => 'isCustomerName', 'email' => 'isEmail', 'passwd' => 'isPasswd',
                 'id_gender' => 'isUnsignedId', 'birthday' => 'isBirthDate', 'newsletter' => 'isBool', 'optin' => 'isBool', 'active' => 'isBool', 'note' => 'isCleanHtml', 'is_guest' => 'isBool');
    protected $exclude_copy_post = array('secure_key', 'active', 'date_add', 'date_upd', 'last_passwd_gen', 'newsletter_date_add', 'id_default_group', 'ip_registration_newsletter', 'note', 'is_guest', 'deleted');
}

Comme pour PrestaShop 1.5 / 1.6 / 1.7, il faut supprimer le fichier www/cache/class_index.php pour que les overrides soient pris en compte.
C’est bon, il ne vous reste plus qu’à tester les inscriptions à la place de vos clients et voir si tout est correct.
Bonnes ventes !
 

12 commentaires sur “Comment protéger PrestaShop des comptes clients spams ?

  1. C’est bien vos astuces mais comment fait-on lorsque l’on est pas un pro du développement informatique comme vous ? J’espère bien avoir une réponse cette fois. Merci d’avance. Cordialement.

    1. Bonjour Mathias,
      Merci pour votre commentaire.
      Les articles et tutos publiés sur mon blog sont rédigés de manière bénévole pour aider la communauté sur des points généraux et parfois plus techniques.
      Pour les sujets nécessitant de travailler dans le code, il faut en effet se doter d’un socle de connaissance sur les CMS et les principaux langages comme HTML / PHP / CSS pour pouvoir comprendre et reproduire les tutos.
      Pour cela, je vous invite à vous rapprocher de formations comme OpenClassRoom pour n’en citer qu’une, ou alors de faire appel à un développeur pour déléguer cette partie.
      Merci et à bientôt 🙂

  2. Bonjour,
    J’ai bien appliqué votre procédure. Plus d’inscription.
    Mais maintenant j’ai une erreur 500 si je veux créer un compte.
    Pouvez-vous m’aider? Merci
    Bien cordialement
    Marie-Pascale

  3. Bonjour,
    Un grand merci pour votre procédure qui fonctionne très bien.
    J’avais juste fait une petite erreur au départ.
    Bien cordialement
    Marie-Pascale

  4. Bonjour,
    Les inscriptions du genre www cut us sont revenues il y a quelques heures.
    Je suis en version 1.6
    J’ai placé en override le fichier validate.php et le fichier customer.php, et j’ai ensuite supprimé le fichier www/cache/class_index.php. Est-ce que j’ai oublié une opération? Merci
    Bien cordialement
    Marie-Pascale

    1. Bonjour,
      Avez-vous testé une inscription avec en prénom ou nom « www » ?
      Il faut bien tester cela pour vérifier si l’override est pris en compte.

  5. Bonjour,
    Je viens d’essayer de créer un compte avec www et çà l’a pris en compte.
    Donc l’override n’a pas fonctionné.
    Savez-vous ce qu’il faut que je fasse? Merci
    Bien cordialement
    Marie-Pascale

Laisser un commentaire

Consultez les autres articles