ModSecurity pour en finir avec le spam de commentaires dans WordPress
Je cherchais depuis des semaines à bloquer les spams de commentaires par des règles s’appliquant aux contenus des champs de formulaires utilisés par WordPress. Jusqu’à présent, j’utilisais le filtrage par adresse ip ou par domaine au niveau Apache. Clairement, je ne m’en sors plus ! J’y passe aujourd’hui environ 30 minutes par jour en moyenne pour les 6 blogs WordPress que j’administre.
ModSecurity, un Waf pour Apache
Je vous avais parlé, il y a quelques temps, de ModSecurity, un Web Application Firewall pour Apache. Il vous permet de vous protéger d’attaques en DDoS, d’injections SQL, de requêtes parasites et agressives, d’attaques de type XSS… et du spam de commentaires sous WordPress.
Les formulaires de commentaires sous WordPress utilisent les champs author, email, url et comment. J’ai donc ajouté au fichier de configuration de ModSecurity /etc/httpd/conf.d/mod_security.conf les règles suivantes :
#Filtering on the email suffix (ru or ua in this sample) SecRule REQUEST_FILENAME "wp-comments-post.php" "id:1,deny,log,chain" SecRule REQUEST_METHOD "POST" "chain" SecRule ARGS:email "@rx \.(ru|top|ua)$" #Filtering on the url (youtube in this sample) SecRule REQUEST_FILENAME "wp-comments-post.php" "id:2,deny,log,chain" SecRule REQUEST_METHOD "POST" "chain" SecRule ARGS:url "@rx ^https?://(www\.)?youtube\.com(/|$)" #Filtering on the words used in the comment (porn or steroids in this sample) SecRule REQUEST_FILENAME "wp-comments-post.php" "id:3,deny,log,chain" SecRule REQUEST_METHOD "POST" "chain" SecRule ARGS:comment "@rx (^| )(porn|steroids?)( |$)" #Filtering on the url suffix (in or ru or ua in this sample) SecRule REQUEST_FILENAME "wp-comments-post.php" "id:4,deny,log,chain" SecRule REQUEST_METHOD "POST" "chain" SecRule ARGS:url "@rx \.(in|ru|ua)(/|$)"