brown and gray tower under white clouds and blue sky during daytime

register_shutdown_function PHP : Guide pour sécuriser votre site

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 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 :

  1. Les user-agents suspects et leurs patterns anormaux
  2. Les adresses IP chelous avec géolocalisation
  3. Les comportements pas nets répétitifs
  4. 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 !

Samy Kantari - Expert WordPress + IA

Kantari Samy

Expert WordPress + IA

👨‍💻 10 ans dans le game WordPress, chez Whodunit, à bricoler du code, à dompter des bugs et à faire tourner des projets de toutes tailles.
Puis l’IA est arrivée… et là, révélation 💡 !
J’ai switché de mindset, réinventé ma façon de coder et avec le vibe coding : une nouvelle ère où je ne suis plus limité par le temps ni par les outils.

Aujourd’hui ? Je code toujours… Mais avec mon copilote IA.
On forme une team de choc. Lui, c’est la puissance. Moi, c’est la vision. Ensemble, on déverrouille ce qui semblait impossible hier. 🚀

10+ Années d'expérience
+++ Projets réalisés
80% code par IA
S’abonner
Notification pour
guest
2 Commentaires
Commentaires en ligne
Afficher tous les commentaires
Do Rosario

Merci Sami pour l’article ! Super utile, je vais voir comment je peux mettre ça en place sur nos sites de productions.