Disponible
← Retour au journal
Infogérance

Mettre en cage une attaque massive sur le FacetedSearch PrestaShop

MariaDB à 100 % de CPU, des bots qui crawlent des dizaines de milliers d'URLs de filtres : comment on a identifié, jailé via fail2ban et borné une attaque sur la navigation à facettes PrestaShop.

22.06.2026 ·Jérôme

Un matin, alerte : MariaDB à 100 % de CPU, la boutique répond en huit secondes. Le slow query log est noyé sous des requêtes de navigation à facettes (ps_facetedsearch). En face, une poignée d'IP qui crawlent des dizaines de milliers d'URLs de filtres combinés. Un déni de service — volontaire ou non, le résultat est le même.

Pourquoi le FacetedSearch est une cible

Chaque combinaison de filtres (marque × couleur × taille × prix…) génère une URL et une requête SQL lourde. Pour un bot, c'est un espace quasi infini d'URLs à visiter ; pour votre base, c'est une avalanche de jointures non cachées. Quelques requêtes par seconde suffisent à mettre une boutique à genoux.

1. Repérer le motif dans les logs

Les URLs de filtres PrestaShop portent le paramètre ?q= avec plusieurs segments. On sort le top des IP qui les martèlent :

grep -oE '^[0-9.]+ .*\?q=[^ ]+-[^ ]+-' access.log \
  | awk '{print $1}' | sort | uniq -c | sort -rn | head

2. Une cage fail2ban dédiée

On écrit un filtre qui matche les requêtes de facettes combinatoires, puis une jail agressive : au-delà de 30 hits en une minute, on bannit 24 h.

# /etc/fail2ban/filter.d/ps-facetedsearch.conf
[Definition]
failregex = ^<HOST> -.*"GET [^"]*\?q=[^"]*-[^"]*-[^"]* HTTP
ignoreregex =
# /etc/fail2ban/jail.d/ps-facetedsearch.local
[ps-facetedsearch]
enabled  = true
filter   = ps-facetedsearch
logpath  = /chemin/vers/access.log
findtime = 60
maxretry = 30
bantime  = 86400
action   = iptables-allports[name=facet]

3. Couper le robinet côté crawl

La jail éteint l'incendie ; le robots.txt évite qu'il reparte. On interdit l'indexation des URLs de filtres, qui n'ont de toute façon aucune valeur SEO :

# robots.txt
User-agent: *
Disallow: /*?q=
Disallow: /*&q=

En complément : noindex sur les pages filtrées, et exclusion des URLs ?q= du cache pour ne pas saturer le disque avec des variantes inutiles.

Le résultat

IP abusives bannies en quelques minutes, requêtes par seconde divisées par quatre, charge revenue à la normale. La leçon de fond : le FacetedSearch est un excellent outil de conversion, mais c'est aussi une surface d'attaque. Sur les boutiques qu'on infogère, il est borné dès le premier jour — pas le matin où la base prend feu.

#prestashop #infogerance #devops #mariadb #securite