Hamdy Tabsissi
FR

Observatoire En production Projet personnel

Détecter automatiquement quand la sécurité d'un site se dégrade

Un petit robot qui contrôle mes sites toutes les 30 minutes et signale tout réglage de sécurité disparu sans bruit.

Le besoin

Un réglage de sécurité retiré par erreur lors d'une mise à jour ne se voit pas — jusqu'à ce qu'un audit, ou un client, le remarque.

L'idée

Ne pas compter sur sa mémoire pour vérifier. Faire tourner le contrôle tout seul, à l'écart de ce qu'il surveille, pour qu'une panne ne puisse jamais en cacher une autre.

Ce que j'ai construit

  • Un contrôle des protections standard qu'un site doit envoyer : cinq en-têtes de sécurité, le passage en HTTPS, les réglages des cookies, et l'expiration du certificat avec trois semaines d'avance.
  • Il tourne selon son propre calendrier, en dehors des sites, et garde son historique dans sa propre base.
  • Un tableau de bord privé, derrière une authentification.

Le résultat

  • 30 minentre deux contrôles
  • 5en-têtes de sécurité vérifiés à chaque passage
  • 3 semainesd'avance avant l'expiration d'un certificat
  • 30/08/2026en service depuis

À son premier passage, il a trouvé un en-tête qui révélait la version du framework utilisé — corrigé dans l'heure. Puis il a trouvé sa propre erreur : son premier tableau de bord était public et listé dans le sitemap, une vraie carte pour un attaquant. Fermé le jour même, puis rouvert derrière une authentification.

En images

Schéma : mes sites, un contrôle automatique des en-têtes, du TLS et des cookies, puis un historique des résultats, en continu

Ce que j'ai appris

Un outil de sécurité doit d'abord réussir son propre test. Un outil de surveillance qui montre publiquement ce qu'il surveille devient un outil de reconnaissance pour quiconque le trouve.

Détails techniques Stack, architecture et choix — pour les lecteurs techniques

Stack

  • Node.js (sans dépendance npm)
  • Express
  • SQLite (node:sqlite)
  • timer systemd
  • Cloudflare Access

Comment ça marche

  • Contrôles : présence de CSP, HSTS, X-Frame-Options, X-Content-Type-Options et Referrer-Policy ; aucune fuite Server ou X-Powered-By ; Secure et HttpOnly sur chaque cookie ; redirection HTTP → HTTPS ; certificat TLS qui n'expire pas dans les trois semaines.
  • Zéro dépendance npm — uniquement les modules natifs de Node.
  • Découplé par construction : le contrôleur est un service systemd déclenché toutes les 30 minutes qui écrit dans sa propre base SQLite ; le tableau de bord ne fait que lire cette base et n'exécute jamais de contrôle.
  • Après l'exposition auto-infligée : tableau de bord retiré du sitemap et du robots.txt, identifiants de service sortis du code source, puis rouvert uniquement derrière Cloudflare Access sur un sous-domaine dédié.

Ce qui manque encore

  • Tableau de bord non public — volontairement