Score composite (0-10) mesurant la sante operationnelle d'un site web.
OSIRIS agregre les resultats d'outils tiers sur 4 axes : Performance (O) + Securite (S) + Intrusion (I) + Ressources (R).
Avertissement : OSIRIS est un outil d'observation automatisee, pas un pentest ni une certification de conformite. Les scores sont indicatifs et sujets a variance (cf. Limitations).
- Python 3.11+
- Node.js 18+ (pour Lighthouse CLI)
- Google Chrome / Chromium
# Cloner et installer
cd osiris-scanner
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
# Installer Lighthouse CLI
npm install -g lighthouse
# (Optionnel) Mode deep — installer les navigateurs Playwright
playwright install chromiumpython scanner.py --url https://example.compython scanner.py --url https://example.com --output reportGenere :
reports/<domain>_<date>.json— Rapport JSON structurereports/<domain>_<date>.md— Rapport Markdown lisible
python scanner.py --url https://example.com --runs 3Execute Lighthouse N fois et retourne la mediane. Tolere les timeouts partiels : si 1 run sur 3 echoue, la mediane est calculee sur les 2 restants.
python scanner.py --url https://example.com --mode deepEn mode deep, les axes Intrusion et Resource utilisent Playwright au lieu du HTML statique :
| Axe | Mode fast | Mode deep |
|---|---|---|
| I — Intrusion | Parse HTML pour trouver les domaines dans <script>, <img>, <link> |
Capture toutes les network requests reelles (inclut trackers JS dynamiques) |
| R — Resource | Mesure le poids du HTML principal | Somme le poids total transfere (tous assets : JS, CSS, images, fonts) |
| O — Performance | Lighthouse CLI (identique) | Lighthouse CLI (identique) |
| S — Security | Observatory + Headers (identique) | Observatory + Headers (identique) |
# Deep mode + 3 runs Lighthouse + rapport + historique
python scanner.py --url https://example.com --mode deep --runs 3 --output report --historypython scanner.py --url https://example.com --historyAffiche les scans precedents du meme domaine (necessite le module soic_v3).
python calibrate.pyScanne les sites listes dans calibration/sites.txt et produit calibration/results.json.
osiris-scanner/
├── scanner.py # Orchestrateur principal (CLI)
├── scoring.py # Agregation ponderee (formule publique)
├── report.py # Generation rapports JSON + Markdown
├── calibrate.py # Script de calibration multi-sites
├── axes/
│ ├── performance.py # Axe O — Wrapper Lighthouse CLI
│ ├── security.py # Axe S — Mozilla Observatory + Headers HTTP
│ ├── intrusion.py # Axe I — Detection trackers (fast: HTML, deep: Playwright)
│ └── resource.py # Axe R — Poids page + Website Carbon API
├── blocklists/
│ └── trackers.json # 110+ domaines de tracking connus
├── soic_v3/ # Quality gates, persistance, convergence (optionnel)
├── calibration/ # Donnees de calibration
├── reports/ # Rapports generes
├── tests/ # ~156 tests unitaires
└── pyproject.toml
mu_osiris = Performance x 0.20 + Security x 0.30 + Intrusion x 0.30 + Resource x 0.20
| Axe | Poids | Outil | Mesure |
|---|---|---|---|
| O — Performance | 20% | Lighthouse CLI | Core Web Vitals, score 0-100 normalise a 0-10 |
| S — Security | 30% | Mozilla Observatory + Headers | Grade + presence headers securite |
| I — Intrusion | 30% | Blocklist Analysis (fast) / Playwright (deep) | Trackers detectes |
| R — Resource | 20% | Page Weight + Website Carbon | Poids page + gCO2 estimes |
| Score | Grade |
|---|---|
| 9.0 - 10.0 | Exemplaire |
| 7.0 - 8.9 | Conforme |
| 5.0 - 6.9 | A risque |
| 0.0 - 4.9 | Critique |
- Securite et Intrusion (30% chacun) : priorite a la protection des utilisateurs
- Performance et Resource (20% chacun) : qualite de l'experience et eco-responsabilite
- Lighthouse en mode headless peut donner des scores differents d'un navigateur reel
- Certains sites bloquent Chrome headless (
NO_FCP), rendant le scan impossible - Variance ~10% entre executions — utiliser
--runs 3pour obtenir une mediane stable - Timeout par defaut : 120 secondes par run
- Mozilla Observatory cache les resultats 24h ; un re-scan immediat retourne le cache
- L'analyse des headers est limitee a la presence/absence, pas a la qualite de la configuration
- Certains serveurs bloquent les requetes HEAD, necessitant un fallback GET
- Mode fast : analyse basee sur le HTML statique uniquement ; les trackers charges dynamiquement par JavaScript ne sont pas detectes (cela explique les scores eleves meme pour des sites connus pour leur tracking, ex: Google)
- Mode deep : capture les network requests via Playwright ; detecte les trackers JS
dynamiques, mais necessite Chromium installe (
playwright install chromium) - La blocklist couvre ~110 domaines ; les trackers non listes ne sont pas detectes
- Mode fast : mesure le poids du HTML principal uniquement (pas les assets)
- Mode deep : mesure le poids total transfere (tous assets via Playwright)
- L'API Website Carbon
/datapeut etre indisponible ; fallback sur le modele SWD v4 local - L'estimation gCO2 est approximative
- OSIRIS mesure la sante operationnelle d'un site, pas sa qualite de contenu
- Ce n'est pas un pentest et ne remplace pas un audit de securite professionnel
- Ce n'est pas une certification de conformite (RGPD, WCAG, etc.)
- Le scanner necessite un acces reseau aux APIs externes (Observatory, Website Carbon, Green Web Foundation)
- Rate limiting : 1 scan Observatory par domaine toutes les 60 secondes
- Un scan echoue partiellement est affiche avec un score partiel (moyenne des axes reussis)
Si un axe echoue (timeout, API indisponible, Lighthouse absent), OSIRIS :
- Affiche l'erreur pour l'axe concerne
- Continue les axes restants
- Calcule un score partiel base sur les axes reussis (au lieu de crash)
# Tous les tests
python -m pytest tests/ -v
# Tests specifiques
python -m pytest tests/test_performance.py -v
python -m pytest tests/test_intrusion.py -v
# Lint
ruff check .
# Type checking
mypy axes/ scanner.py scoring.py report.py --ignore-missing-importsMIT License — Copyright (c) 2026 Mark Systems
See LICENSE for details.
Composite score (0-10) measuring the operational health of a website.
OSIRIS aggregates results from third-party tools across 4 axes: Performance (O) + Security (S) + Intrusion (I) + Resources (R).
Disclaimer: OSIRIS is an automated observation tool, not a pentest or compliance certification. Scores are indicative and subject to variance.
mu_osiris = Performance × 0.20 + Security × 0.30 + Intrusion × 0.30 + Resource × 0.20
| Axis | Weight | Tool | Measurement |
|---|---|---|---|
| O — Performance | 20% | Lighthouse CLI | Core Web Vitals, 0-100 normalized to 0-10 |
| S — Security | 30% | Mozilla Observatory + Headers | Grade + security headers presence |
| I — Intrusion | 30% | Blocklist Analysis (fast) / Playwright (deep) | Trackers detected |
| R — Resource | 20% | Page Weight + Website Carbon | Page weight + estimated gCO2 |
- Two scan modes: fast (HTML parsing) and deep (Playwright headless browser)
- Multi-run Lighthouse with median stabilization (
--runs 3) - JSON + Markdown report generation
- Scan history with trend tracking
- Multi-site calibration tool
- Graceful degradation (partial scores on axis failure)
- 110+ known tracker domains in blocklist
- ~156 unit tests
# Install
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
npm install -g lighthouse
# Basic scan
python scanner.py --url https://example.com
# Deep scan with reports
python scanner.py --url https://example.com --mode deep --runs 3 --output reportMIT License — Copyright (c) 2026 Mark Systems