Historique des versions de Cisilino Site Defense Network, le plugin de sécurité WordPress. Il défend la connexion, tient un journal d’activité et contrôle l’intégrité des fichiers. Il propose aussi des durcissements optionnels. Vous trouverez ici, pour chaque version, ce qui a changé. La version actuelle est la 1.0.15.
Version 1.0.15
- Nouvel onglet « Journal de débogage ». Il enregistre les erreurs PHP du site dans un fichier dédié. L’administrateur l’active et le désactive sans modifier
wp-config.php. Il s’éteint tout seul à l’issue de la durée choisie : 1 heure, 24 heures ou 7 jours. - Aucune perte de données. Le journal s’ajoute à
debug.loget au journal du serveur sans les remplacer. Les fichiers ne sont jamais supprimés ni tronqués automatiquement. - Un fichier qui dépasse la taille choisie, de 1 à 50 Mo, est fermé et compressé en
.zip. Avant de supprimer l’original, le plugin vérifie le zip. À la limite de 200 Mo, le journal s’arrête et le signale. - À l’arrêt, les fichiers restent en place. Ils ne se suppriment que depuis l’administration, un par un ou tous ensemble.
- Les fichiers se trouvent dans un dossier au nom aléatoire dans
uploads, protégé par.htaccess. Le journal ne s’active pas si le dossier est accessible depuis internet. Tu peux lire les 200 dernières entrées avec un filtre par niveau et télécharger les fichiers. - Sécurité : le blocage de l’énumération des utilisateurs (
?author=N) ne fonctionnait pas. La redirection de WordPress vers/author/<nome>/partait avant le contrôle. De plus, des valeurs comme1aouauthor[]=1le contournaient. Désormais le contrôle passe en premier et s’applique à toute valeur. - Sécurité : le blocage de l’exécution PHP dans
uploadsignorait les extensions en majuscules, par exempleshell.PHP, que beaucoup d’hébergements exécutent. Il ne couvrait pas non plus WordPress installé dans un sous-dossier. - Sécurité : en multisite, les réglages du plugin écrivent le fichier
.htaccesspartagé par tout le réseau. Ils sont désormais réservés au super admin et non à chaque administrateur de sous-site. - Sécurité : le motif d’un bannissement reçu depuis le panneau est écrit comme commentaire dans
.htaccess. Il ne peut plus contenir de caractères de contrôle ni se terminer par\. Sous Apache, ce caractère prolonge la ligne et annulait la règle de blocage suivante. - Limites : le journal voit les erreurs générées après le chargement du plugin, pas celles supprimées avec
@. À la désinstallation, les fichiers collectés restent dansuploads.
Version 1.0.14
- Documentation : le readme renvoie désormais vers les guides et l’historique des versions sur cisilino.com. Le comportement du plugin ne change pas.
Version 1.0.13
- Rate limiting des auteurs : la limite par défaut était de 3 contenus en 5 minutes. Elle suspendait aussi un administrateur qui travaillait simplement, par exemple en important ou dupliquant plusieurs pages d’affilée. Elle ne touchait pas que les comptes compromis. La nouvelle valeur par défaut est de 150 contenus en 5 minutes. Elle supporte un usage intensif réel et continue de bloquer celui qui en publie des centaines d’un coup. Ceux qui avaient déjà personnalisé la valeur ne sont pas touchés.
Version 1.0.12
- Rate limiting des auteurs : il ne compte plus ce qui se passe à l’intérieur d’une installation de WordPress ou dans un environnement temporaire avec un préfixe de tables différent. Cas réel : le Plugin Check crée une installation de test avec un article, une page d’exemple et une politique de confidentialité. Il suspendait l’administrateur qui l’utilisait. Les brouillons automatiques, les révisions et les éléments à la corbeille ne comptent plus non plus.
- Avis dans le tableau de bord tant qu’une suspension est active. L’utilisateur suspendu voit le motif et la date de fin. Les administrateurs voient la liste des utilisateurs suspendus, avec le lien pour révoquer.
- L’onglet « Rate limiting » explique concrètement ce qui est compté et ce qui ne l’est pas. Il explique aussi ce que signifie être suspendu et comment en sortir.
Version 1.0.11
- Nouvel onglet « Rate limiting » avec trois garde-fous, activables et désactivables séparément. Auteurs : un utilisateur qui crée ou publie plus de N articles/pages dans la fenêtre T est suspendu pendant S secondes. L’administrateur principal reçoit un e-mail avec les contenus récents à vérifier. Visiteurs (invités) : plus de N commentaires ou formulaires de contact dans la fenêtre T bloquent l’IP pendant S secondes. Le blocage ne vaut que pour ce type d’envoi. Le comptage est conservé dans une table dédiée et fonctionne aussi avec les commentaires désactivés. E-mail obligatoire (dans l’onglet Inscription des utilisateurs) : aucun utilisateur ne peut être créé sans adresse e-mail valide, par quelque voie de création que ce soit. Chaque garde-fou a deux interrupteurs : rate limit actif oui/non et alerte par e-mail oui/non. L’alerte auteurs est active par défaut, celle des visiteurs est désactivée. Toutes les valeurs N, T et S sont configurables. Les suspensions actives sont listées dans l’onglet, avec la possibilité de les révoquer.
Version 1.0.10
- Correction d’une autre ERREUR bloquante du Plugin Check (WordPress.Security.EscapeOutput.OutputNotEscaped), qui avait survécu au correctif précédent. Le phpcs:ignore sur l’echo multiligne dans print_idle_script() ne couvrait que sa propre ligne. Il ne couvrait pas les suivantes avec admin_url()/wp_create_nonce()/wp_login_url(). L’appel est désormais affecté à une variable avant l’unique ligne d’echo, qui porte l’ignore en entier.
Version 1.0.9
- Correction d’une ERREUR bloquante du Plugin Check officiel (PluginCheck.CodeAnalysis.Heredoc.NotAllowed). Le script inline de la déconnexion automatique de l’admin utilisait la syntaxe heredoc, non admise par les directives de wordpress.org. C’est maintenant une chaîne PHP normale, sans changement de comportement.
Version 1.0.8
- Correction d’une erreur fatale (Uncaught Error: Call to undefined function get_home_path()) qui pouvait survenir lors d’une tentative de connexion échouée. Csdn_Htaccess::htaccess_path() chargeait par erreur wp-admin/includes/misc.php au lieu de wp-admin/includes/file.php, le fichier qui définit réellement get_home_path(). Dans un contexte d’administration, l’erreur fatale restait invisible, car la fonction était déjà disponible par ailleurs. Sur wp-login.php, en revanche, elle pouvait bloquer l’accès au site par une erreur fatale. Le plugin devait seulement enregistrer la tentative.
Version 1.0.7
- Sécurité : correction d’une condition de concurrence dans la détection de force brute (Csdn_Detector::on_login_failed). Elle permettait de contourner le seuil local de blocage en envoyant en parallèle des tentatives de connexion échouées pour la même IP. Le compteur est désormais un upsert atomique (INSERT … ON DUPLICATE KEY UPDATE), et non plus une lecture et une écriture séparées.
Version 1.0.6
- Nouvel onglet « Paranoic Hardening » : en-têtes de sécurité HTTP optionnels (X-Content-Type-Options, X-Frame-Options, Referrer-Policy, HSTS). Ils sont tous désactivés par défaut et appliqués via WordPress (send_headers), pas via .htaccess. Ils fonctionnent donc aussi sans mod_headers.
- HSTS est protégé par une garde explicite. L’activation est refusée si la requête d’enregistrement n’arrive pas en https. On évite ainsi d’envoyer un en-tête qui rendrait le site inaccessible à ceux qui le reçoivent, si le site cessait d’être toujours en https.
- Chaque option a une explication intégrée sous son contrôle. Elle dit ce que fait l’option, quand elle est sûre et ce qu’elle peut casser.
- Nouveau test intégré « Vérifier les en-têtes de sécurité » : une requête réelle vers la page d’accueil pour contrôler quels en-têtes arrivent vraiment dans la réponse. C’est utile quand un CDN ou un reverse proxy en amont les retire en transit.
- Paranoic Hardening : nouvelle déconnexion automatique des administrateurs pour inactivité, désactivée par défaut. Le délai est configurable en secondes (60-86400). Il est mesuré côté navigateur (souris, clavier, défilement, partagé entre les onglets), pas côté serveur. Ainsi, les requêtes automatiques de WP Heartbeat ne sont pas prises pour de l’activité réelle. À l’expiration du délai, la session est vraiment fermée avec wp_logout(), pas par une simple redirection visuelle.
Version 1.0.5
- Réorganisation du panneau : nouveaux onglets dédiés « IP bloquées » (avec filtre JavaScript côté client), « Hardening / IDS » et « Test » (vérification du blocage PHP des uploads + intégrité). Ils sont séparés de l’onglet Général.
Version 1.0.4
- Blocage de l’exécution PHP dans uploads : les extensions .phar/.phps/.pht sont désormais couvertes aussi. Avant, seules .php/.phpN/.phtml l’étaient.
- Suppression de la directive php_admin_flag de la règle de blocage. Sur un hébergement PHP-FPM/CGI Apache, elle la rejette avec une erreur 500 sur tout le site. Require all denied seul suffit déjà.
- Ajout d’un test intégré depuis le panneau pour vérifier que le blocage fonctionne vraiment sur le site. On ne se fie plus à la seule configuration enregistrée.
Version 1.0.3
- Sécurité : correction d’une validation insuffisante des adresses IP reçues du panneau. Une réponse falsifiée pouvait insérer des directives arbitraires dans le .htaccess du site. Désormais, seules les adresses IP et CIDR complets sont acceptés, à la réception comme en dernier contrôle avant l’écriture du fichier. Aucune source d’IP ne peut plus le contourner, y compris les surcharges locales.
- Sécurité : la liaison au panneau exige désormais https. La requête de synchronisation transporte la clé API. En http, elle était lisible par quiconque se trouvait sur le chemin réseau. http reste autorisé uniquement vers les hôtes de développement local.
- Sécurité : la surveillance des téléversements reconnaît désormais .user.ini, qui sous PHP-FPM équivaut à un .htaccess. Elle reconnaît aussi les fichiers SVG et les noms construits avec des octets nuls ou des espaces finaux pour masquer une extension exécutable.
- Nouveau plafond de lignes du journal d’activité, 500 par défaut et configurable dans Réglages > Journal d’activité. Il limite l’espace disque occupé par le journal. Le journal grossit aussi sous l’effet de requêtes non authentifiées (connexions échouées, commentaires, envois de fichiers). Quand on relève le plafond, la page avertit de la consommation accrue.
- Correction d’un défaut : avec le journal d’activité activé mais sans panneau configuré, la rétention ne supprimait jamais rien. Les lignes restaient en attente de livraison vers un destinataire inexistant. La table grossissait sans limite.
- Les chemins personnalisés des règles de durcissement sont désormais nettoyés avant d’être écrits. Guillemets et caractères de contrôle n’entrent jamais dans le .htaccess, qui pouvait sinon devenir invalide. Auparavant, la personnalisation n’était pas assez filtrée. Un chemin mal écrit pouvait rendre le site inaccessible. Nous avons choisi d’écarter ces caractères en silence au moment d’écrire la règle, pour protéger l’utilisateur des erreurs. Dans le champ, ils restent tels que saisis, mais n’ont aucun effet.
Version 1.0.2
- Nouvelle section « Inscription des utilisateurs » (Réglages) : trois politiques pour limiter la création de nouveaux utilisateurs WordPress. Les politiques sont : aucune restriction, uniquement des rôles à faibles privilèges, ou inscription entièrement exclue. Avec les rôles à faibles privilèges, on ne crée jamais administrator, editor, author ni shop_manager. C’est toujours appliqué, même en cas d’erreur de configuration. Elle est ACTIVE PAR DÉFAUT sur « uniquement des rôles à faibles privilèges » : les rôles à privilèges élevés sont déjà bloqués dès l’installation, sans configuration. La politique couvre wp-admin, l’API REST, XML-RPC, WP-CLI et les appels directs d’extensions/thèmes tiers. Elle utilise le filtre central de WordPress, par lequel passe toute voie de création d’utilisateur. Il y a aussi un filet de sécurité : il révoque immédiatement les droits d’un compte créé pendant que la politique était active, quelle que soit la voie d’entrée.
Version 1.0.1
- Nettoyage du readme : le changelog ne reprend que les versions publiées sur le dépôt officiel.
Version 1.0.0
- Première version publique.
- Défense de la connexion : détection des tentatives échouées, blocage local des IP gênantes dans .htaccess, liste blanche et déblocage manuel depuis les réglages.
- Réseau Cisilino : échange facultatif d’un condensé d’IP hostiles avec le panneau et avec les autres sites du réseau. Il est désactivé tant que la liaison n’est pas configurée.
- Journal d’activité : les événements pertinents du site sont enregistrés localement avec une rétention configurable. Ce sont les connexions, utilisateurs, contenus, extensions, thèmes, cœur, options, médias et téléversements. Ils sont envoyés au panneau juste après l’événement, sans ralentir la page servie.
- Vérification d’intégrité : le plugin compare les empreintes MD5 de ses propres fichiers au manifeste distribué avec la version. Il signale les fichiers modifiés, manquants ou imprévus dans son propre dossier.
- Surveillance des téléversements : elle consigne les fichiers qui entrent sur le site même hors de la médiathèque. Elle reconnaît les extensions exécutables, y compris les doubles extensions comme image.php.jpg, et peut les refuser.
- Durcissements facultatifs, tous désactivés par défaut.
Les versions antérieures à la 1.0.0 n’ont jamais été distribuées publiquement. Pour les fonctions en détail, commencez par l’article de présentation du plugin.