# Sécurité : surfaces, dépendances, licences

Un site statique sans compte ni base de données a une surface d'attaque réduite : ce qui reste à surveiller, ce sont les **dépendances**, les **licences** et les **services voisins** (CRISalid) dont la vitrine pourrait un jour dépendre.

---

## 📑 Sommaire de la section

<FeatureGrid cols={3}>
  <FeatureCard
    icon="🗺️"
    title="Surfaces réseau"
    description="Services et bases de données de CRISalid, et la frontière qui en découle pour la vitrine."
    href="/securite/cartographie-surfaces-reseau"
  />
  <FeatureCard
    icon="📦"
    title="Politique de dépendances"
    description="Choix des dépendances, versions supportées, délai de correctif des vulnérabilités, dépendances de développement."
    href="/securite/politique-dependances"
  />
  <FeatureCard
    icon="📜"
    title="Inventaire SPDX"
    description="Licences des dépendances de la vitrine et du graphe CRISalid, des polices, des images et du code repris."
    href="/securite/inventaire-spdx"
  />
</FeatureGrid>

---

## 🛡️ Ce que le socle expose, et ce qu'il n'expose pas

<Mermaid
  title="Surface exposée d'une instance déployée"
  chart={`flowchart LR
  INTERNET((Internet))
  subgraph PUBLIC["Public, en lecture seule"]
    PAGES["Pages statiques fr/en<br/>aucun compte, aucun formulaire"]
    SEARCH["Index Pagefind<br/>fichiers statiques"]
    HEALTH["/api/health<br/>version, commit"]
    TELEM["/api/telemetry<br/>catégorie de clic sortant, rien d'autre"]
  end
  subgraph FERME["Fermé ou interne"]
    METRICS["/api/metrics<br/>jeton Bearer, bloqué à l'ingress"]
    REVAL["/api/revalidate<br/>secret, inutile en statique"]
    ADMIN["/admin<br/>construit seulement si NEXT_PUBLIC_ADMIN=true"]
  end
  subgraph HORS["Jamais exposé"]
    RAW["data/raw<br/>noms de personnes, hors Git"]
    SECRETS["Jetons Matomo, Rybbit<br/>lus côté serveur uniquement"]
  end
  INTERNET --> PAGES
  INTERNET --> SEARCH
  INTERNET --> HEALTH
  INTERNET --> TELEM
  INTERNET -. "refusé sans jeton" .-> METRICS`}
/>

Les secrets ne passent jamais par une variable `NEXT_PUBLIC_*` : un contrôle automatique cherche onze valeurs réelles dans le bundle construit (`pnpm analytics:check-bundle`). Voir aussi [Sécurité de la pile analytics](/analytics/conception/security).
