[M2] Rendu Canvas via WebKitWebView sandboxé (SF-M2-07, ST-M2-04) #27

Closed
opened 2026-04-06 01:35:17 +00:00 by charles · 0 comments
Owner

Contexte

Quand un agent envoie un Canvas (HTML interactif), Fractal+ doit l'afficher dans un WebView intégré au lieu d'un simple lien (SF-M2-07). La sécurité est critique : sandbox strict, pas de réseau, pas de stockage (ST-M2-04).

Critères d'acceptation

  • CanvasRenderer basé sur webkit2gtk::WebView avec sandbox strict
  • CSP injectée : default-src 'self'; script-src 'unsafe-inline' — pas de connect-src, pas de fetch externe
  • allow_file_access_from_file_urls = false, allow_universal_access_from_file_urls = false
  • Taille max du WebView : 640×480 par défaut (configurable dans config.toml)
  • Protocole postMessage hôte ↔ canvas : CanvasToHost::Resize, HostToCanvas::ThemeChanged
  • Aucun accès au DOM parent depuis le canvas
  • Fallback texte si webkit2gtk non disponible ou sandbox échoue

Notes techniques

pub struct CanvasRenderer {
    webview: webkit2gtk::WebView,
}
  • Dépendance : webkit2gtk dans le Flatpak manifest
  • Risque de sécurité principal : injection HTML depuis un agent malveillant — le CSP est la première ligne de défense
  • Dépend de #20 (AgentDetector pour identifier la source)
## Contexte Quand un agent envoie un Canvas (HTML interactif), Fractal+ doit l'afficher dans un WebView intégré au lieu d'un simple lien (SF-M2-07). La sécurité est critique : sandbox strict, pas de réseau, pas de stockage (ST-M2-04). ## Critères d'acceptation - [ ] `CanvasRenderer` basé sur `webkit2gtk::WebView` avec sandbox strict - [ ] CSP injectée : `default-src 'self'; script-src 'unsafe-inline'` — pas de `connect-src`, pas de fetch externe - [ ] `allow_file_access_from_file_urls = false`, `allow_universal_access_from_file_urls = false` - [ ] Taille max du WebView : `640×480` par défaut (configurable dans `config.toml`) - [ ] Protocole `postMessage` hôte ↔ canvas : `CanvasToHost::Resize`, `HostToCanvas::ThemeChanged` - [ ] Aucun accès au DOM parent depuis le canvas - [ ] Fallback texte si `webkit2gtk` non disponible ou sandbox échoue ## Notes techniques ```rust pub struct CanvasRenderer { webview: webkit2gtk::WebView, } ``` - Dépendance : `webkit2gtk` dans le Flatpak manifest - Risque de sécurité principal : injection HTML depuis un agent malveillant — le CSP est la première ligne de défense - Dépend de #20 (AgentDetector pour identifier la source)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/my-fractal#27
No description provided.