Les formulaires d’inscription PrestaShop sont une cible classique des robots spammeurs. Ils créent des comptes en masse dont le nom contient une adresse web, dans le seul but de faire apparaître ces liens quelque part sur votre boutique.
La parade consiste à interdire les adresses web dans les champs nom et prénom, ce que PrestaShop ne fait pas nativement. Voici comment procéder.

Le principe
PrestaShop valide chaque champ avec une fonction dédiée. Les champs nom et prénom utilisent par défaut la fonction isName, qui accepte les lettres et rejette les chiffres, mais laisse passer une chaîne comme « www.monsite.com ».
Nous allons créer une fonction de validation plus stricte, puis demander à PrestaShop de l’utiliser à la place de la précédente.
1. Créer la fonction de validation
Ouvrez le fichier classes/Validate.php et ajoutez cette fonction :
|
1 2 3 4 5 6 7 8 |
public static function isCustomerName($name) { if (preg_match('/www|http/ui',$name)) { return false; } return preg_match('/^[^0-9!\[\]<>,;?=+()@#"°{}_$%:\/\\\*\^]*$/u', $name); } |
Elle rejette d’emblée toute valeur contenant « www » ou « http », puis applique une vérification de caractères comparable à celle d’origine.
2. Déclarer la nouvelle validation sur le client
Dans classes/Customer.php, repérez la définition des champs. Vous y trouverez ceci :
|
1 2 |
'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32), 'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32), |
Remplacez la validation par la nouvelle fonction :
|
1 2 |
'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'isCustomerName', 'required' => true, 'size' => 32), 'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'isCustomerName', 'required' => true, 'size' => 32), |
3. Mettre à jour le tableau de validation
Toujours dans classes/Customer.php, le tableau fieldsValidate déclare les validations utilisées. Vous y lirez :
|
1 2 3 |
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'); |
Remplacez-le par :
|
1 2 3 |
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'); |
Videz ensuite le cache de PrestaShop pour que les modifications soient prises en compte.
Une précaution importante
Ces modifications portent sur des fichiers du cœur de PrestaShop. Elles seront écrasées à la prochaine mise à jour.
Deux conséquences pratiques : notez ces modifications quelque part, et vérifiez-les après chaque montée de version. Sur une installation récente, la bonne pratique consiste à passer par un module de surcharge plutôt que d’éditer directement le cœur, ce qui rend la modification pérenne.
Sauvegardez systématiquement les fichiers avant intervention. Une erreur de syntaxe dans Validate.php rend la boutique entièrement inaccessible.
Les autres mesures contre le spam d’inscription
Cette validation traite un symptôme précis. D’autres mesures la complètent utilement :
- Un captcha sur le formulaire d’inscription, qui écarte la majorité des robots.
- La confirmation par courriel avant activation du compte.
- La limitation du nombre d’inscriptions par adresse IP sur une période donnée.
- Le nettoyage régulier des comptes créés sans commande, qui alourdissent la base.
Questions fréquentes
Pourquoi des robots s’inscrivent-ils sur ma boutique ?
Pour faire apparaître des adresses web dans les champs nom et prénom, dans l’espoir qu’elles soient affichées quelque part sur le site.
PrestaShop bloque-t-il ces inscriptions nativement ?
Non. La validation par défaut rejette les chiffres mais accepte une chaîne comme « www.monsite.com » dans un champ nom.
Ces modifications résistent-elles aux mises à jour ?
Non. Elles portent sur le cœur de PrestaShop et seront écrasées. Notez-les et vérifiez-les après chaque montée de version, ou passez par une surcharge.
Faut-il préférer un captcha ?
Pour un spam massif, oui : il traite le problème à la source sans modifier le cœur. La validation reste utile en complément.
Que faire des comptes spam déjà créés ?
Supprimez les comptes sans commande dont le nom contient une adresse web. Sauvegardez la base avant toute suppression en masse.
À lire aussi dans PrestaShop
Prix d’un site PrestaShop : le budget réel
Prix d'un site PrestaShop : thème, modules, intégration et coûts récurrents. Pourquoi gratuit ne veut pas dire sans budget.
Taux de conversion PrestaShop : les points à corriger
Améliorer le taux de conversion PrestaShop : tunnel de commande, fiches produits, vitesse et paniers abandonnés. Par quoi commencer.
Meta keywords PrestaShop : faut-il encore les remplir ?
Meta keywords sur PrestaShop : Google les ignore depuis 2009. Pourquoi, ce que risque un remplissage excessif et où porter votre effort.