---
title: Interfaces Frontières & Périmètres de Confiance
description: Analyse des contrats d'entrée/sortie, des points d'extension publics et des limites de confiance dans VertiWiki.
tags: [vertiwiki, architecture, securite, interfaces-frontieres, contrats, francais]
---

# Interfaces Frontières & Périmètres de Confiance

> For the complete documentation index and agent navigation, see [llms.txt](/llms.txt).

Ce document formalise les frontières de sécurité, les points d'entrée/sortie réseau et les contrats d'interface qui encadrent l'environnement d'exécution côté client de VertiWiki.

---

## 🚪 Interfaces d'Entrée (Ingress)

| Interface | Mécanisme | Données Reçues | Niveau de Confiance | Assainissement |
| :--- | :--- | :--- | :--- | :--- |
| **Route Hash URL** | `window.location.hash` | Chemin du fichier Markdown et ancre (`#/guide.md#sec`) | Non fiable | `normalizePath()`, `slugify()` |
| **Paramètres Query URL**| `window.location.search` | Paramètres historiques (`?page=`, `?doc=`) | Non fiable | `normalizePath()`, redirection |
| **Documents Markdown** | HTTP `fetch()` | Texte Markdown, frontmatter YAML, fragments HTML | Non fiable | `DOMPurify.sanitize()`, `autoCloseFences()` |
| **Configuration** | HTTP `fetch('config.json')`| Drapeaux d'interface, modes de mise en page, thèmes | Semi-fiable | Analyse JSON défensive avec valeurs de repli |
| **Fichiers de Thèmes** | HTTP `fetch('themes/*.json')` | Couleurs, URLs de polices, styles CSS | Semi-fiable | Normalisation et assainissement des jetons |
| **Requête de Recherche** | Fenêtre Modale (<kbd>⌘K</kbd>)| Chaîne de recherche saisie | Non fiable | Échappement regex, tokenizer MiniSearch |
| **Iframes Intégrées** | Rédaction Markdown | URLs tierces, présentations interactives | Non fiable | Sandbox imposé avec `allow-presentation`, sans `allow-top-navigation` |

---

## 📤 Interfaces de Sortie (Egress)

| Interface | Cible | Données Transmises | Déclencheur |
| :--- | :--- | :--- | :--- |
| **Récupérateur de Fichiers** | Serveur Web / CDN | Requêtes HTTP GET pour `.md` et `.json` | Changements de route et initialisation |
| **Polices Web** | Google Fonts / CDN | Requêtes `@font-face` typographiques | Thèmes spécifiant `fontUrl` |
| **Télémétrie** | Fournisseurs (GA4, Plausible) | Chemins visités et résolution d'écran | Changements de route (si configuré) |
| **Stockage Local** | `localStorage` du navigateur | Mode du thème (`dark`/`light`), état des onglets | Actions de l'utilisateur |

---

## 🛡️ Périmètres de Confiance & Flux de Données

```mermaid
flowchart TD
    subgraph Zone Externe Non Fiable
        WebUser[Utilisateur Navigateur / Hash URL]
        MarkdownFiles[Fichiers Markdown Distants]
        ThemeFiles[Fichiers JSON de Thèmes]
    end

    subgraph Frontiere 1: Assainissement a l'Entree
        RouterValidate[normalizePath & sanitizeUrl]
        PurifyFilter[Filtre Durci DOMPurify]
        ThemeNormalize[Normalisateur de Jetons]
    end

    subgraph Zone Interne de Confiance
        AppPipeline[Middleware Pipeline & Etat]
        SearchIndex[(Index MiniSearch en Memoire)]
        SafeDOM[(DOM Rendu dans #verti-app)]
    end

    WebUser --> RouterValidate
    MarkdownFiles --> PurifyFilter
    ThemeFiles --> ThemeNormalize

    RouterValidate --> AppPipeline
    PurifyFilter --> SafeDOM
    PurifyFilter --> SearchIndex
    ThemeNormalize --> SafeDOM
```

### Invariants de Sécurité :
1. **Le Markdown Brut est Toujours Non Fiable** : DOMPurify constitue une barrière infranchissable entre le compilateur Markdown et le DOM du navigateur.
2. **Cloisonnement du Stockage Local** : Les clés écrites dans `localStorage` sont validées par rapport aux identifiants de presets connus.
3. **Aucune Évaluation Dynamique de Code** : L'utilisation de `eval()` ou `new Function()` est rigoureusement proscrite dans VertiWiki.
4. **Isolation des Iframes** : Les balises `<iframe>` tierces sont restreintes par défaut à `sandbox="allow-scripts allow-same-origin allow-popups allow-forms allow-presentation"`, neutralisant le détournement de fenêtre principale.

---

## 🧩 Contrats d'Extension Publics

### Contrat de Plugin (`src/core/pipeline.ts`)
```typescript
export interface VertiWikiPlugin {
  name: string;
  beforeParse?: (markdown: string, context: PluginContext) => Promise<string> | string;
  afterParse?: (html: string, context: PluginContext) => Promise<string> | string;
  afterRender?: (context: PluginContext) => Promise<void> | void;
}
```

### Contrat de Thème (`src/core/types.ts`)
```typescript
export interface ThemePreset {
  id: string;
  name: string;
  previewColor: string;
  fontUrl?: string;
  extends?: string;
  light: ThemeColors;
  dark: ThemeColors;
}
```
