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.
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 !