SecurityWatch moniteur multi-sites

Surveille une liste de sites de cinq façons en même temps : uptime, page d'accueil trafiquée, expiration TLS, security headers manquants et drift WordPress, avec un webhook optionnel.

SecurityWatch est un moniteur de sécurité multi-sites pour la personne qui gère un site, ou une poignée, et qui veut attraper les ennuis en quelques heures plutôt qu'en quelques semaines. Mets tes sites dans une watchlist et chaque scan en contrôle chacun de cinq façons : est-ce qu'il répond, est-ce que la page d'accueil a été trafiquée (une empreinte page-hash), quand est-ce que le cert TLS expire, est-ce qu'un security header a discrètement disparu, et est-ce que WordPress a sauté une version majeure. Les snapshots vivent dans ton navigateur, donc dès que quelque chose bouge entre deux runs on te le dit en clair, du genre expiration TLS passée de 87 à 14 jours ou header HSTS disparu. Les quatre sondes partent côté serveur, donc le CDN surveillé logge notre IP, pas la tienne, pendant que ta watchlist, tes snapshots et ton URL de webhook ne quittent jamais le localStorage. Un webhook optionnel balance une alerte JSON direct de ton navigateur vers Slack, Discord, n8n ou ton propre serveur dès qu'une régression à gravité haute apparaît, sans backend à héberger. Il ne scanne que quand tu cliques, donc traite-le comme du triage rapide avant une migration, un changement d'hébergeur ou un swap de CDN, pas comme un service d'alerte en arrière-plan.

Les requêtes passent par le service de lookup PeopleAreGeek. Nous ne journalisons rien.

Monitoring de sécurité multi-sites

Mets tes sites dans une watchlist. À chaque fois que tu passes, SecurityWatch en contrôle chacun de cinq façons : est-ce qu'il répond, est-ce que la page d'accueil a été trafiquée (ça, c'est une histoire de page-hash), quand est-ce que le cert TLS expire, est-ce qu'un security header a discrètement disparu, et est-ce que WordPress a sauté une version majeure dans ton dos. Les snapshots vivent dans ton navigateur, donc dès que quelque chose bouge entre deux runs, on te le dit en clair. Il y a aussi un webhook optionnel. Tu colles une URL et il balance une alerte JSON à la seconde où quelque chose casse, ce qui veut dire que tu peux brancher SecurityWatch directement sur Slack, Discord ou n8n (ou franchement n'importe quel bricolage que tu t'es monté) sans aucun backend.

La watchlist est stockée uniquement dans ton navigateur (localStorage). Effacer les données de navigation la supprime. Aucun compte requis.

Ce que SecurityWatch surveille et pourquoi ça compte

SecurityWatch est un moniteur de sécurité multi-sites pour la personne qui gère un site, ou une poignée, et qui veut apprendre en quelques heures plutôt qu'en quelques semaines que quelque chose de visible depuis l'extérieur a changé. La plupart de ce qui flingue un site en 2026, ce n'est pas un zero-day spectaculaire. C'est le truc lent et chiant. Un cert dont l'auto-renew a calé en silence et qui expire mardi prochain. Un security header qui a sauté pendant une mise à jour de thème et personne ne l'a remarqué. Un CMS qui s'est mis à jour d'une version majeure entière et qui a cassé un plugin au passage. Ou un defacement qui a remplacé ta page d'accueil par un script de crypto-jacking, et ça reste là pendant trois semaines parce que, bon, qui scrolle vraiment jusqu'à la page marketing ? La watchlist vit dans ton navigateur. C'est toi qui déclenches les scans. Et les diffs entre deux visites te montrent ce qui a bougé.

Cinq checks par site. L'uptime, c'est juste une requête HTTP qui récupère le status code, le response time et où mènent les éventuelles redirections. La détection de defacement hashe une empreinte de la page d'accueil après avoir viré timestamps, nonces et markup pub, de sorte qu'un vrai changement de contenu la déclenche mais que le bruit inoffensif ne fait rien. Le TLS expiry lit le cert, qui l'a émis, et combien de jours il reste. L'orange s'allume à 30 jours, le rouge à 14. Les security headers surveillent HSTS, CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy et Permissions-Policy, et gueulent quand l'un de ceux qui étaient là la dernière fois a disparu. Et le drift de version WordPress jette un œil au meta generator et à la query de version accrochée à ton CSS ou ton JS pour repérer un saut de version majeure qui mérite sûrement un coup d'œil plus attentif.

Comment le workflow de monitoring tourne sans backend

  1. Ajoute un site en collant son URL, plus un label si tu veux. L'entrée se range dans localStorage sous la clé pag-securitywatch-v1, là, directement dans ton navigateur.
  2. Scanne quand ça te chante en cliquant sur « Scanner maintenant ». Le scan tape quatre endpoints publics sur le serveur PeopleAreGeek (headers, ssl, status, seo-page) et recoud les résultats ensemble. Rien ne part ailleurs.
  3. Compare le nouveau snapshot au dernier qui traîne dans le local storage. Tout ce qui a changé est expliqué en clair. Des trucs du genre « expiration TLS passée de 87 à 14 jours » ou « le header HSTS a disparu » ou « le hash de la page d'accueil a changé ».
  4. Webhook optionnel : colle une URL (un Slack incoming webhook, un Discord webhook, un endpoint catch n8n, ton propre serveur, comme tu veux). Quand SecurityWatch repère une régression, il POST un petit JSON vers cette URL pour que l'alerte atterrisse dans le chat de ton équipe ou là où vit ton automatisation.
  5. Exporte toute la watchlist en JSON pour la sauvegarder, ou pour la trimballer vers un autre navigateur. L'import sur la même page la ramène. Pas de compte cloud, et rien qui te verrouille.

Cas d'usage courants pour SecurityWatch

  • Petit portefeuille de sites clients. Disons que tu es freelance et que tu chouchoutes dix builds WordPress pour des clients. Balance-les tous dans la watchlist et lance un scan en un clic une fois par semaine, peut-être le lundi matin avant le standup.
  • Filet de sécurité pour les migrations. Tu viens de déplacer un site vers un nouvel hébergeur ou de changer de CDN ? Lance SecurityWatch tout de suite, puis encore deux jours plus tard. Si un header ou le TLS a discrètement régressé, tu le verras.
  • Alerte précoce de defacement. Le check de page-hash attrape une modif non autorisée de la page d'accueil quelques minutes après le scan suivant, bien avant que tu tombes dessus toi-même.
  • Contrôle de bon sens sur le renouvellement de certificat. L'auto-renew, c'est génial jusqu'à ce que ça ne le soit plus. Les certs ratent encore l'installation parfois, un challenge DNS qui ne veut pas valider, un compte qui a tapé une rate limit. C'est ta dernière ligne de défense avant que les visiteurs commencent à voir cet horrible avertissement de navigateur.
  • Preuve de conformité. Ces snapshots JSON exportés font office d'audit trail à peu près correct quand un framework léger réclame la preuve que tu lances vraiment des contrôles périodiques.

Limitations et notes de confidentialité

Soyons clairs sur ce que c'est. SecurityWatch est un moniteur côté navigateur, pas un service hébergé. Il ne scanne que quand l'onglet est ouvert et que tu appuies sur le bouton. Pas de cron qui tourne dans le cloud, pas de planificateur d'e-mails, pas de dashboard partagé, pas de logins d'équipe. Le hic, c'est que la watchlist voyage avec ton navigateur. Privée, certes, mais efface tes données de navigation ou passe sur une autre machine et elle disparaît, sauf si tu l'as exportée avant. Si tu as vraiment besoin d'une couverture 24h/24 sans intervention, branche un cron CI sur les mêmes endpoints, ou appuie-toi sur un truc comme UptimeRobot ou BetterStack pour la partie purement uptime. Pour des checks rapides à la demande sans inscription, c'est à peu près la meilleure option gratuite du marché.

Les probes en elles-mêmes sont douces. De simples requêtes HEAD ou GET visant la page d'accueil publique de chaque site que tu surveilles. Chaque probe part du serveur PeopleAreGeek, donc c'est cette IP que les gros CDN vont logger, pas la tienne. La watchlist, les snapshots, ton URL de webhook, l'e-mail que tu as tapé, tout ça reste dans le localStorage du navigateur et n'atteint jamais PeopleAreGeek. Et le webhook optionnel part directement de ton navigateur vers l'URL que tu as définie, donc le destinataire voit le payload JSON pendant que PeopleAreGeek ne voit rien du tout.

Questions fréquentes

Est-ce que SecurityWatch tourne en continu en arrière-plan ?

Non. Il ne tourne que quand tu as la page ouverte et que tu cliques sur « Scanner tout maintenant », ou quand tu lances un « Scanner maintenant » sur un site précis. Tu veux qu'il surveille alors qu'aucun onglet n'est ouvert ? Il faudra plutôt taper les mêmes endpoints depuis un cron job ou un workflow CI.

Où est stockée la watchlist ?

Dans le localStorage de ton navigateur, sous la clé pag-securitywatch-v1. Elle n'est jamais envoyée à PeopleAreGeek ni nulle part ailleurs. Tu prévois d'effacer tes données de navigation ? Exporte d'abord en JSON pour ne pas la perdre.

C'est quoi exactement le check de defacement ?

SecurityWatch construit une empreinte de la page d'accueil (titre, description, canonical et liste des h1) et passe un SHA-256 dessus après avoir arraché les scripts et le bruit dynamique habituel comme les timestamps et les nonces. Si ce hash diffère du dernier scan, il signale un possible defacement et te laisse aller inspecter la page de tes yeux. Il ne sait pas distinguer un hack d'un vrai redesign, donc la décision finale, c'est la tienne.

Comment je branche le webhook sur Slack ou Discord ?

D'abord, crée un incoming webhook. Dans Slack, c'est via Workflow Builder ou App Settings. Dans Discord, c'est planqué sous Edit Channel, puis Integrations, puis Webhooks. Récupère l'URL qu'il te donne et colle-la dans l'onglet Alertes. SecurityWatch envoie un payload JSON que les deux plateformes comprennent d'office.

Qu'est-ce qui compte comme une régression de security header ?

C'est un header qui apparaissait dans ton dernier snapshot mais qui a maintenant disparu ou qui est vide. Ajoute un nouveau header et SecurityWatch le note comme une amélioration. Perds-en un et c'est une régression. Perdre HSTS, ça pèse lourd. Perdre Referrer-Policy, c'est léger.