Die HoneyBar braucht kein 'unsafe-inline' mehr

Ihre Stile hingen als <style> im Shadow DOM, und Markup faellt unter die
CSP der Gastgeber-App: Jede fremde App musste deshalb style-src
'unsafe-inline' erlauben, sonst stand die HoneyBar schwarz auf schwarz da.

Jetzt kommen sie als konstruiertes Stylesheet ueber die CSSOM herein, die
keine CSP kennt. Damit braucht die App gar keine style-src-Erlaubnis mehr
-- auch keine fuer die HoneyOS-Domain, was der geplante Weg ueber eine
zweite Datei und <link> gekostet haette, samt zweiter Anfrage.

Der Strich zum Wiederausklappen hat seinen eigenen Shadow-Root und geht
denselben Weg. Der Rueckfall fuer alte Browser laeuft nach innerHTML,
sonst raeumt das Markup ihn gleich wieder weg.

Gemessen an einer nachgebauten App mit style-src 'self': Leiste bernstein,
32 px, Strich mit Verlauf, keine CSP-Meldung.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
marcandClaude Opus 5 committed 2026-09-11 13:50:06 +02:00
1 parent 8ca16aec84
commit 3b47003492
4 files changed
+97 -33

No files matched your search

+13 -7
View File
@@ -448,7 +448,7 @@ location / {
# 2. Die CSP der App ersetzen, nicht ergänzen. Zwei CSP-Kopfzeilen bedeuten
# nicht „mehr erlaubt", sondern „beide müssen zustimmen".
proxy_hide_header Content-Security-Policy;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://honeyos.example.com; connect-src 'self' https://honeyos.example.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://honeyos.example.com; connect-src 'self' https://honeyos.example.com; style-src 'self'; img-src 'self' data:" always;
# 3. Nur HTML anfassen; JSON, Bilder und Downloads bleiben unberührt.
sub_filter_types text/html;
@@ -463,12 +463,18 @@ Liste ist zugleich die CORS-Freigabe. **Auf den Ursprung genau**: `localhost` un
oder ein abweichender Port. Passt er nicht, erscheint die HoneyBar mit leerer
App-Liste und in der Konsole steht ein CORS-Fehler.
**Warum `style-src 'unsafe-inline'`:** Die HoneyBar bringt ihre Stile mit, im
Shadow DOM. Eine strenge CSP verbietet die — gemessen: die HoneyBar erscheint,
aber schwarz auf schwarz, ohne Röhre. Das ist eine echte Abschwächung der
CSP dieser App; viele fertige Werkzeuge brauchen `unsafe-inline` ohnehin für
sich selbst, aber wissen sollte man es. (Auflösbar, indem die HoneyBar ihre Stile
als eigene Datei ausliefert — steht in [IDEAS.md](IDEAS.md).)
**Kein `style-src 'unsafe-inline'` nötig** (seit 11.09.2026). Die HoneyBar
bringt ihre Stile zwar mit, hängt sie aber als konstruiertes Stylesheet
(`adoptedStyleSheets`) in ihren Shadow DOM statt als `<style>`-Element. Nur
Markup fällt unter die CSP, über die CSSOM gesetzte Stile nicht — die App
braucht für die HoneyBar also weder `'unsafe-inline'` noch eine Freigabe für
die HoneyOS-Domain. Vorher stand die HoneyBar unter einer strengen CSP schwarz
auf schwarz da. Gemessen an einer nachgebauten App mit `style-src 'self'`:
Leiste bernstein, 32 px, keine CSP-Meldung.
Browser ohne konstruierbare Stylesheets (vor Safari 16.4, Firefox 101) fallen
auf das `<style>`-Element zurück — dort gilt der alte Stand, also `unsafe-inline`
oder eine Leiste ohne Farbe.
**Apps mit COEP** (alles mit WASM oder SharedArrayBuffer — BentoPDF etwa)
lehnen fremde Dateien ab, die sich nicht zur Einbettung bekennen. HoneyOS