Vos visiteurs aboutissent sur une page de loterie, de pharmacie ou de faux soutien technique, alors que vous voyez votre site normalement. C'est la signature d'une redirection injectée, le plus souvent conditionnelle. Ce guide explique comment la reproduire, la trouver dans les fichiers ou la base de données, et fermer l'accès qui a servi à la poser.
wp-config.php..htaccess, les fichiers PHP, la base de données, les réglages d'adresse du site.wp-content/uploads, extensions à réinstaller ou à supprimer.Une redirection posée lors d'un piratage choisit à qui elle s'applique. Elle épargne le plus souvent la personne qui gère le site, pour rester en place le plus longtemps possible. Les conditions les plus courantes :
Referer de la requête.User-Agent.Un message de client qui dit « votre site m'envoie ailleurs » se prend donc au sérieux, même si tout s'affiche correctement chez vous.
Placez-vous dans la situation du visiteur qui la subit :
Si vous avez accès à un terminal, cette commande demande votre page d'accueil en se présentant comme un iPhone arrivé depuis Google :
curl -s -i -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)" -e "https://www.google.com/" https://www.votre-site.com/
Lisez les premières lignes de la réponse. Un code 301 ou 302 suivi d'une ligne Location: vers une adresse inconnue signale une redirection faite par le serveur : elle se trouve dans .htaccess ou dans un fichier PHP. Un code 200 alors que le navigateur est redirigé signale une redirection faite dans la page, en JavaScript : elle se trouve le plus souvent dans la base de données ou dans un fichier du thème.
wp-config.php, constante DB_PASSWORD), puis chaque compte administrateur WordPress.AUTH_KEY à NONCE_SALT de wp-config.php par un jeu neuf, généré sur https://api.wordpress.org/secret-key/1.1/salt/. Toutes les sessions ouvertes sont fermées, celle de l'intrus comprise.wp config shuffle-salts
À la racine du site, et parfois dans un sous-dossier, .htaccess peut recevoir des règles de réécriture ajoutées par l'intrus. Le bloc que WordPress écrit lui-même est court, encadré par # BEGIN WordPress et # END WordPress :
# BEGIN WordPress
# Les directives (lignes) entre « BEGIN WordPress » et « END WordPress » sont générées
# dynamiquement et doivent uniquement être modifiées via les filtres de WordPress.
# Toute modification des directives situées entre ces marqueurs sera surchargée.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Une règle RewriteCond qui teste %{HTTP_REFERER} (google, bing, facebook) ou %{HTTP_USER_AGENT} (android, iphone, mobile), suivie d'une RewriteRule vers une adresse extérieure, est la redirection. Les extensions de cache et de sécurité écrivent aussi leurs propres blocs, balisés à leur nom : rapprochez chaque bloc de la liste de vos extensions avant de le retirer.
WP-CLI compare les fichiers du cœur de WordPress et des extensions aux sommes de contrôle publiées par WordPress.org, et liste chaque fichier modifié ou ajouté :
wp core verify-checksums
wp plugin verify-checksums --all
La seconde commande couvre les extensions distribuées par le répertoire WordPress.org. Une extension achetée chez son éditeur se compare à une copie fraîche téléchargée depuis votre compte chez lui. C'est un cas fréquent : sur les 540 sites de PME sous WordPress de notre relevé du 1er septembre 2026, 66 % portent au moins une extension absente du répertoire public.
Sans WP-CLI, deux recherches donnent un premier tri :
find . -name "*.php" -mtime -30
find wp-content/uploads -name "*.php"
La première liste les fichiers PHP modifiés ces 30 derniers jours, la seconde les fichiers PHP rangés dans le dossier des médias, où ils sont suspects par défaut (certaines extensions y déposent un index.php vide, qui est légitime). Une date de modification se falsifie : un fichier ancien reste à examiner s'il est au mauvais endroit.
Ouvrez en priorité wp-config.php, le index.php de la racine, le functions.php et le header.php du thème actif, et le dossier wp-content/mu-plugins : les extensions qui s'y trouvent se chargent d'office et ne se désactivent pas depuis l'administration. Les signes à chercher : eval(, base64_decode(, gzinflate(, str_rot13(, de longues chaînes illisibles, ou window.location suivi d'une adresse que vous ne connaissez pas.
Une redirection en JavaScript s'insère volontiers dans le contenu des pages ou dans les réglages, où aucun fichier ne la montre. WP-CLI cherche une chaîne dans toutes les tables de WordPress :
wp db search "<script"
wp db search "fromCharCode"
Sans WP-CLI, les mêmes recherches se lancent dans phpMyAdmin, onglet SQL :
SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%<script%';
SELECT option_name FROM wp_options WHERE option_value LIKE '%<script%';
Certains résultats sont légitimes : un outil de mesure d'audience, un bandeau de témoins ou un widget ajouté par vous. Ce qui ne correspond à rien de ce que vous avez installé est à examiner, en particulier un script qui construit une adresse à partir de codes de caractères.
Dans Réglages > Général, « Adresse web de WordPress (URL) » et « Adresse web du site Web (URL) » doivent porter votre domaine. Les mêmes valeurs peuvent être imposées dans wp-config.php par les constantes WP_HOME et WP_SITEURL : vérifiez les deux endroits.
wp option get home
wp option get siteurl
wp user list --role=administrator
Quand les constantes sont définies, les deux premières commandes renvoient leur valeur. La dernière liste les administrateurs, avec leur date d'inscription ; dans l'administration, la même liste s'obtient depuis le menu Utilisateurs, filtré sur le rôle Administrateur. Un compte que personne ne reconnaît se supprime, en attribuant ses contenus à un compte légitime.
Supprimer la ligne qui redirige arrête le symptôme. L'accès utilisé par l'intrus, lui, reste ouvert tant qu'il n'a pas été trouvé, et la redirection revient dans les jours qui suivent. L'ordre qui tient :
wp-admin et wp-includes, puis lancez wp core download --skip-content --force, qui réécrit le cœur sans toucher à vos extensions, thèmes et médias. La commande écrase les fichiers existants mais ne supprime aucun fichier ajouté : c'est pourquoi les deux dossiers se suppriment d'abord, et pourquoi les fichiers PHP inconnus de la racine se retirent à la main.wp-content/uploads, les règles ajoutées à .htaccess et les scripts trouvés dans la base.wp cron event list : une tâche au nom inconnu peut remettre le code en place.Si le site conserve des renseignements personnels (formulaires, comptes clients, commandes), notez l'heure à laquelle vous avez constaté le piratage et ce qui a été exposé. La LPRPDE prévoit de déclarer au commissaire à la protection de la vie privée toute atteinte aux mesures de sécurité visant des renseignements personnels dont il est raisonnable de croire qu'elle présente un risque réel de préjudice grave pour une personne, le plus tôt possible après avoir conclu à l'atteinte. Les personnes touchées en sont avisées dans le même délai, et chaque atteinte, déclarée ou non, est consignée dans un registre.
Quand Google détecte la redirection, Chrome peut afficher une page rouge « Site dangereux » avant d'ouvrir le site, et Google peut écrire sous votre résultat « Il est possible que ce site ait été piraté ». Le rapport Problèmes de sécurité de Google Search Console dit ce qui a été relevé et sur quelles adresses. Une fois le site nettoyé, le bouton Demander un examen lance la vérification.
Une redirection retirée laisse une question : qui tient le site ensuite ? Simafri reprend votre site WordPress, le remet en ligne sur une base que nous hébergeons, sécurisons et tenons à jour, et s'en occupe mois après mois. Vous gardez votre nom de domaine et votre contenu.
Le code injecté lit le User-Agent du navigateur et ne redirige que les cellulaires. La personne qui gère le site, souvent sur ordinateur, ne voit rien. Testez depuis un cellulaire en données cellulaires, ou avec curl en envoyant l'identifiant d'un navigateur mobile.
Réinstaller le cœur réécrit les fichiers de WordPress, sans supprimer ceux qu'un intrus a pu y ajouter. La base de données, le thème, les extensions et le dossier des médias restent tels quels, et c'est là que la redirection et l'accès de l'intrus se trouvent le plus souvent. Le cœur neuf est une étape du nettoyage, à compléter par la base, les extensions, les comptes et les mots de passe.
Parce que l'accès qui a servi à la poser est encore là : un compte administrateur ajouté, un fichier PHP caché dans les médias, une tâche planifiée, une extension vulnérable. Chacun permet de remettre le code en place après le nettoyage. Vérifiez les comptes, le dossier wp-content/uploads, les tâches planifiées et les versions des extensions, puis changez à nouveau les mots de passe.
Ouvrez Google Search Console, puis le rapport Problèmes de sécurité : il liste les problèmes détectés et des exemples d'adresses. Si le site n'est pas encore validé dans Search Console, la validation par enregistrement DNS couvre tout le domaine.
Simafri
Parlons de votre site web
Dites-nous en deux mots votre projet : on revient vers vous rapidement.
Merci ! Votre demande a bien été envoyée. Nous vous répondrons rapidement.
Vous préférez l'email ? Écrivez-nous à support@simafri.com.