Nettoyer un .htaccess piraté
Le .htaccess est la cachette préférée des redirections et blocages malveillants. Voici comment repérer les règles injectées, les retirer et restaurer un fichier sain.
Un fichier .htaccess piraté est l’une des premières choses à vérifier quand votre WordPress se comporte mal : redirections vers un site inconnu, admin inaccessible, pages qui chargent un script étranger. C’est un fichier de configuration discret, placé à la racine, que les pirates adorent parce qu’il s’exécute avant même que WordPress démarre. Cet article vous montre à quoi ressemble un .htaccess sain, comment repérer les règles injectées, et comment restaurer un fichier propre.
à quoi sert le .htaccess (et pourquoi les pirates le visent)
Le .htaccess est un fichier de configuration lu par le serveur Apache à chaque requête. Il sert normalement à des choses légitimes : réécrire les URL pour avoir des permaliens propres, forcer le HTTPS, protéger un dossier par mot de passe, gérer des redirections après une migration.
Le problème, c’est que ce fichier agit en amont de tout le reste. Une règle posée dans le .htaccess s’applique avant que la moindre ligne de WordPress ne s’exécute. Un pirate qui y glisse ses instructions peut donc :
- Rediriger une partie de vos visiteurs vers un site de paris ou de pharmacie, sans toucher à votre contenu.
- Bloquer l’accès à
/wp-adminou àwp-login.phppour vous empêcher de reprendre la main. - Forcer l’exécution d’un fichier PHP caché sur chaque page chargée, ce qui maintient une porte d’entrée active.
Le fichier commence par un point, donc il est masqué par défaut dans la plupart des explorateurs de fichiers et des clients FTP. Pensez à activer l’affichage des fichiers cachés avant de chercher.
à quoi ressemble un .htaccess WordPress sain
Voici le bloc que WordPress génère par défaut. C’est ce qui doit s’y trouver, et rien d’autre si vous n’avez pas ajouté de règles vous-même :
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Retenez la règle simple : tout ce qui est légitime et généré par WordPress se trouve entre # BEGIN WordPress et # END WordPress. Si votre hébergeur ou un plugin de cache a ajouté des règles, elles sont en général dans leurs propres blocs, eux aussi bien délimités et commentés (par exemple # BEGIN WP Rocket).
Ce qui doit attirer votre attention, c’est tout ce qui se trouve avant ou après ces blocs identifiés, surtout si c’est illisible ou si ça mentionne un domaine que vous ne connaissez pas.
les règles suspectes à repérer
Voici les injections les plus fréquentes. Une seule suffit à compromettre le site.
Une redirection vers un domaine inconnu. Une RewriteRule qui envoie vers une adresse externe que vous n’avez jamais configurée :
RewriteRule ^(.*)$ http://domaine-inconnu.xyz/ [R=301,L]
Des conditions sur le referer ou le user-agent. C’est la signature du cloaking : la redirection ne se déclenche que si le visiteur arrive depuis Google, ou depuis un mobile. Vous, qui tapez l’URL directement, vous ne voyez jamais rien.
RewriteCond %{HTTP_REFERER} (google|bing|yahoo) [NC]
RewriteCond %{HTTP_USER_AGENT} (android|iphone) [NC]
RewriteRule ^(.*)$ http://site-casino.xyz/ [R,L]
Un ErrorDocument détourné. Au lieu d’afficher votre page 404, le serveur charge un script malveillant à chaque erreur :
ErrorDocument 404 /wp-content/uploads/erreur.php
Un auto_prepend_file qui pointe vers une backdoor. Cette directive force PHP à exécuter un fichier donné avant chaque page. Si ce fichier est une porte dérobée, elle tourne en permanence :
php_value auto_prepend_file /home/compte/public_html/wp-content/uploads/x.php
Du code encodé. Si vous tombez sur de longues chaînes en base64, des RewriteRule avec des caractères illisibles, ou des directives que vous ne comprenez pas, considérez-les comme suspectes par défaut. Un .htaccess légitime est court et lisible.
comment nettoyer le fichier
La méthode la plus sûre est aussi la plus simple : remplacer le contenu par le bloc WordPress par défaut.
- Sauvegardez le fichier actuel avant de toucher à quoi que ce soit. Renommez-le
htaccess-infecte.txtet téléchargez-le, au cas où vous auriez besoin de comparer plus tard. - Remplacez tout le contenu par le bloc standard montré plus haut. Si vous aviez des redirections légitimes (suite à une migration, par exemple), remettez-les ensuite une par une, en vérifiant chacune.
- Enregistrez et testez que le site répond normalement et que les permaliens fonctionnent.
Vous pouvez aussi laisser WordPress régénérer le fichier lui-même. Dans l’administration, allez dans Réglages > Permaliens et cliquez sur Enregistrer les modifications sans rien changer. WordPress réécrit alors un .htaccess propre avec le bloc par défaut. Cette méthode ne fonctionne que si le fichier est accessible en écriture par le serveur, ce qui est le cas dans la plupart des hébergements.
Mon conseil : faites les deux. Remplacez d’abord le contenu à la main pour être sûr de retirer l’injection, puis régénérez via les permaliens pour vérifier que WordPress reconstruit bien un fichier sain.
ne pas oublier les .htaccess des sous-dossiers
C’est l’erreur classique. Vous nettoyez le .htaccess de la racine, le problème disparaît une journée, puis il revient. La raison : il existe d’autres .htaccess ailleurs dans l’arborescence.
WordPress autorise un .htaccess dans chaque dossier, et chacun s’applique à son répertoire. Inspectez en particulier :
wp-content/uploads: il ne devrait normalement contenir aucun.htaccess, ou seulement des règles posées par un plugin de sécurité. Un.htaccesspirate y sert souvent à réautoriser l’exécution de PHP dans le dossier des images, ce qui transforme une simple pièce jointe en backdoor exécutable. Méfiez-vous d’une ligne commeAddType application/x-httpd-php .jpgou d’un bloc qui autorise le PHP là où il ne devrait pas y en avoir.wp-includesetwp-admin: aucune règle de redirection n’a rien à y faire.- Les dossiers de cache et tout répertoire créé récemment que vous ne reconnaissez pas.
Pour les retrouver tous d’un coup, si vous avez un accès SSH :
find . -name ".htaccess"
Examinez chaque résultat. Tout .htaccess en dehors de la racine qui contient des règles de redirection ou des directives sur l’exécution de PHP mérite un examen attentif.
vérifier que la redirection a disparu
Une fois le fichier nettoyé, ne vous contentez pas de regarder votre site depuis votre admin : à cause du cloaking, ça ne prouve rien. Testez dans les conditions du hack :
- Cherchez votre site sur Google et cliquez sur le résultat, au lieu de taper l’URL.
- Faites le test en navigation privée, pour éviter votre cache et vos cookies.
- Essayez sur mobile, ou en simulant un mobile depuis les outils de développement du navigateur.
Si la redirection ne se déclenche plus dans aucune de ces situations, le .htaccess est propre. Pour le détail complet quand le symptôme est une redirection, voyez le cas d’une redirection vers un casino.
FAQ
J’ai nettoyé le .htaccess et la redirection est revenue. Pourquoi ?
Soit il reste un .htaccess infecté dans un sous-dossier (souvent wp-content/uploads), soit une backdoor active sur le site réinjecte la règle automatiquement. Tant que la porte d’entrée n’est pas fermée, le nettoyage du .htaccess ne tient pas. Il faut trouver la backdoor qui réinjecte le code.
Je ne trouve pas mon fichier .htaccess. Il est masqué parce que son nom commence par un point. Activez l’affichage des fichiers cachés dans votre client FTP (souvent une option « Forcer l’affichage des fichiers cachés ») ou dans le gestionnaire de fichiers de votre hébergeur. S’il n’existe vraiment pas, c’est que votre serveur n’utilise peut-être pas Apache (cas de Nginx, qui gère ces règles autrement).
Est-ce risqué de supprimer le .htaccess ?
Non, à condition de le remplacer par le bloc WordPress par défaut. Sans .htaccess, vos permaliens personnalisés cessent de fonctionner, mais le site reste en ligne. Régénérer le fichier via Réglages > Permaliens règle le problème en un clic.
Le .htaccess est rarement le seul endroit touché. Si vous trouvez une injection ici, partez du principe que d’autres fichiers le sont aussi, et suivez le guide complet quand WordPress est piraté pour une désinfection de bout en bout.
Si vous préférez ne pas y passer la soirée, WP-Detox propose un scan gratuit qui vous montre exactement ce qui est injecté dans vos .htaccess, racine et sous-dossiers compris. Le nettoyage complet prend environ 30 minutes, à 149 € tout compris, avec une sauvegarde réalisée avant toute intervention. Si nous n’arrivons pas à nettoyer votre site, vous êtes remboursé.