Site icon Freelance Expert PrestaShop – WordPress – WooCommerce : Arnaud Merigeau

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.

Pour approfondir ce sujet, consultez notre article Comment modifier les traductions des textes sous PrestaShop ?.

Pour approfondir ce sujet, consultez notre article Bonne année sans spams russes PrestaShop !.

 

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 !
 

Quitter la version mobile