RÉSUMÉ : La fonction register_shutdown_function PHP permet de créer un système de surveillance invisible pour votre site web. Cette fonction native s’exécute automatiquement à la fin de tout code PHP, offrant une opportunité unique de monitorer le trafic, détecter les tentatives d’intrusion et sécuriser votre site sans impacter les performances. Dans ce guide, découvrez comment transformer cette fonction méconnue en véritable garde du corps numérique grâce à des exemples concrets et des techniques avancées de protection.
Tu sais ce qui me fascine avec PHP ? Cette petite fonction register_shutdown_function que personne ne connaît vraiment. C’est comme avoir un vigile qui reste planqué dans ton site même après que tout le monde soit parti.
Je vais te raconter comment j’ai découvert cette pépite et pourquoi elle pourrait bien révolutionner ta façon de sécuriser tes sites web. Parce que franchement, on a tous besoin d’un garde du corps numérique !
Table des matières
- Qu’est-ce que register_shutdown_function PHP ?
- Utilisation dans WordPress
- Créer votre système de surveillance
- Analyser le trafic suspect
- Techniques de protection avancées
Qu’est-ce que register_shutdown_function PHP exactement ?
Le principe fondamental
La fonction register_shutdown_function PHP fait un truc assez malin (documentation officielle PHP.net) :
- Elle se déclenche après chaque script PHP (en gros après le dernier bout de code php de l’application, du script ou autre)
- Elle fonctionne même quand tu appelles exit()
Le plus cool ? Tes visiteurs ne la voient même pas travailler. Elle agit en coulisses, sans bloquer l’affichage de ton site.
L’exemple WordPress
WordPress utilise register_shutdown_function avec son hook shutdown. C’est un peu comme si tu avais un assistant qui range ton bureau après ton départ – le boulot se fait, mais toi tu n’es pas embêté.


On a la doc ici developer.wordpress.org, et la doc nous dit que cela se déclenche juste avant que PHP n’arrête l’exécution.
Le déclic avec WP Cerber : créer votre système d’espionnage
En fouillant dans le code de WP Cerber (un plugin de sécurité WordPress), j’ai eu une révélation. Au lieu d’utiliser les hooks WordPress classiques, ils utilisent directement register_shutdown_function PHP pour surveiller :
- Les user-agents suspects et leurs patterns anormaux
- Les adresses IP chelous avec géolocalisation
- Les comportements pas nets répétitifs
- et d’autres choses 🧙
Récupérer l’URL complète avec register_shutdown_function
Voici le code de base pour capturer toutes les requêtes avec register_shutdown_function PHP :
register_shutdown_function(function() {
if (is_ssl()) {
$scheme = 'https';
} else {
$scheme = 'http';
}
$uri = $scheme . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
// Logique de surveillance ici
});
Ici on récupère l’url en cours sans distinction. Un simple echo $uri pour afficher tout en bas de votre page l’url. Change de page et regarde ce que tu obtiens.
Stocker intelligemment vos données de surveillance
Conseil de quelqu’un qui s’y connait un peu : évite d’encombrer la table options de WordPress. Crée ta propre table, c’est plus propre et plus facile à analyser après.
Tu veux voir ce que ça donne ? Voici quelques perles que j’ai récoltées avec register_shutdown_function :
- samy-kantari.fr//wp1/wp-includes/wlwmanifest.xml
- samy-kantari.fr//xmlrpc.php?rsd
- www.samy-kantari.fr/admin/controller/extension/extension/
- www.samy-kantari.fr/files/
- samy-kantari.fr/.vscode/sftp.json
- samy-kantari.fr/aws.config.js
Clairement, on a affaire à du trafic pas très catholique ! 🙈
Rien de dramatique ici, juste de la recherche automatique : un fichier oublié ? une installation WordPress perdu dans un dossier ? une configuration FTP via l’IDE envoyé en production par erreur ? 🤓
Décrypter le trafic avec register_shutdown_function PHP
Après quelques semaines de collecte avec votre système register_shutdown_function, tu vas voir trois types de visiteurs et 1 bonus 🧙 :
1. Le trafic légitime
Tes vrais visiteurs avec leurs navigateurs normaux et leurs comportements humains prévisibles.
2. Les bons bots
Google, Bing et compagnie avec leurs user-agents reconnaissables et leurs patterns d’exploration respectueux.
3. Les visiteurs suspects
Exemple concret capturé : Une IP indienne tentant d’accéder à www.samy-kantari.fr/admin/controller/extension/extension/ avec un user-agent Chrome 90.0.4430.85 (qui date de 2021).
Mon verdict : Script malveillant détecté !
4. Le visiteur LLM
Et oui, tu peux par exemple avoir un claude qui vient sur ton site pour chercher des infos.
Protection niveau paranoia avec register_shutdown_function
Pour les plus méfiants, on peut mettre en place :
- Restriction IP automatique pour l’admin WordPress
- tu autorises ton IP (via htaccess) pour wp-admin -> simple et rapide
- Blocage auto après 10 erreurs 404 en 5 minutes
- tomber sur des 404 en chaînes c’est pas normal (ou c’est vraiment pas de bol 🤣)
- Géolocalisation des tentatives d’intrusion
- on peut bloquer par pays par exemple
- Analyse comportementale des patterns bizarres
- bloquer les autres trucs 🤖
Code WordPress qu’on pourrait mettre en place
register_shutdown_function(function() {
if (is_admin()) {
return; // On laisse tranquille l'admin
}
if (is_ssl()) {
$scheme = 'https';
} else {
$scheme = 'http';
}
// la logique de surveillance personnalisée
$suspicious_patterns = [
'/wp-config.php',
'/xmlrpc.php',
'/.env',
'/admin/',
...
];
$current_url = $scheme . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
foreach ($suspicious_patterns as $pattern) {
if (strpos($current_url, $pattern) !== false) {
// Log de l'activité suspecte
error_log("Activité suspecte détectée : " . $current_url);
}
}
// la suite de la logique
});
Ce qu’il faut retenir sur register_shutdown_function PHP
register_shutdown_function PHP n’est pas juste une fonction de plus. C’est ton œil invisible, ton garde du corps silencieux qui surveille ton site 24h/24 sans impact sur les performances (ou vraiment minime, tout dépend de ce que tu fais).
En transformant cette fonction basique en système de surveillance intelligent, tu prends une longueur d’avance sur les menaces. Dans la sécurité web, il vaut mieux être parano que désolé !
Mon défi pour toi : Implémente ce système register_shutdown_function, laisse-le tourner quelques semaines, puis analyse tes données. Tu vas être surpris de ce que tu vas découvrir sur le trafic de ton site !



Merci Sami pour l’article ! Super utile, je vais voir comment je peux mettre ça en place sur nos sites de productions.
Coucou Pierre,merci pour ton message 🙂
J’ai en préparation un article pour faire suite à celui-ci pour récupérer les données et en faire quelque chose comme bloquer un accès etc… le petit hook très utile : mu_plugin_loaded pour intervenir avant beaucoup de choses WordPress pour limiter un maximum de chargement inutile.