Solution pour bloquer les spam de faux comptes clients Prestashop
Depuis environ 15 jours les boutiques Prestashop (de la 1.4 à la 1.7) se font spammer via la création de faux comptes clients, si vous ne remédiez pas à ce problème rapidement cela risque de saturer votre base de données et faire dysfonctionner votre boutique.
Pour vérifier si vous en êtes victime de ces spams de masse, il faut vous rendre dans l'administration de votre Prestashop et aller dans la liste de vos clients. Si vous constatez que ce listing comporte des comptes avec comme prénom une phrase en anglais et à la place du Nom une URL (www.xxxx.xxx) c'est que, vous aussi, vous subissez ces créations de faux comptes clients, qui a terme va vous poser des problèmes (saturation de votre base de données -- les créations de faux comptes peut aller jusqu'à plusieurs centaines part jour - ce qui au "mieux" ralentira votre boutique ou au pire la fera planter totalement.
La méthode pour bloquer la création des faux comptes clients sur Prestashop 1.5.4.1 à 1.7:
La première des actions est donc de supprimer manuellement tous ces faux comptes (les identifier avec leur URL à la place Nom de famille).
La seconde et la plus importante est de corriger au plus vite cette faille de sécurité de Prestashop. Pour corriger ce problème il faut donc modifier 2 fichiers et Prestashop alors bloquera automatiquement la création de compte comprenant une URL dans le Nom ou le Prénom du client.
1 : Ajouter ce code dans le fichier classes/Validate.php - un faisant un override pour ne pas modifier le cœur de Prestashop
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);}
2 : Ensuite modifier le fichier dans classes/Customer.php
Rechercher le code
'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32),
'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32),
Le remplacer par
'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'isCustomerName', 'required' => true, 'size' => 32),
'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'isCustomerName', 'required' => true, 'size' => 32),
Pour Prestashop 1.3 et 1.4 la méthode est pratiquement identique
1 : modifier le fichier Validate.php comme ceci :
public static function isCustomerName($name)
{
if (preg_match('/www|http/ui',$name)) { return false;
}
return preg_match('/^[^0-9!\[\]<>,;?=+()@#"°{}_$%:\/\\\*\^]*$/u', $name);
}
2 : Modifier cette partie dans le fichier Customer.php
protected $fieldsValidate = array('secure_key' => 'isMd5', 'lastname' => 'isName', 'firstname' => 'isName', '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');
en
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');
Ne faites ces manipulations de fichiers que si vous êtes sûr de vous et savez exactement ce que vous faites, sinon vous risqueriez d'empêcher vos clients de se connecter ou s'inscrire sur votre boutique, ce qui potentiellement vous ferait perdre de nombreuses ventes…
Ps = merci à "Doekia" du forum Prestashop pour avoir mis cette solution à la disposition de la communauté.
EDIT le 04/05/2019 : Depuis le 03-MAI-2019, la version 1.6.1.24 de Prestashop intègre ce patch
Si vous voulez corriger cette faille de sécurité sans risques pour votre boutique, nous vous invitons à nous contacter et nous vous aiderons à corriger le problème rapidement