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:
1 parent
8ca16aec84
commit
3b47003492
4 files changed
+97
-33
No files matched your search
@@ -288,21 +288,26 @@ Zwei Auswege:
|
||||
→ Ersteres ist das Richtige, sobald die HoneyBar mehr kann als heute (Widgets,
|
||||
Systemmenü). Vorher lohnt der Umbau nicht.
|
||||
|
||||
### Die HoneyBar ohne `unsafe-inline`
|
||||
### Die HoneyBar ohne `unsafe-inline` — ✅ gebaut (11.09.2026)
|
||||
|
||||
Fremde Apps bekommen die HoneyBar über den Reverse Proxy (siehe README). Dabei
|
||||
muss deren CSP heute `style-src 'unsafe-inline'` erlauben, weil die HoneyBar ihre
|
||||
Stile im Shadow DOM mitbringt — ohne das erscheint sie schwarz auf schwarz.
|
||||
Gemessen am 28.08.2026 an einer nachgebauten fremden App.
|
||||
Fremde Apps mussten für die HoneyBar `style-src 'unsafe-inline'` erlauben, weil
|
||||
sie ihre Stile im Shadow DOM als `<style>` mitbrachte — ohne das erschien sie
|
||||
schwarz auf schwarz (gemessen am 28.08.2026).
|
||||
|
||||
**Auflösbar:** Die Stile als eigene Datei neben `honeybar.js` ausliefern und im
|
||||
Shadow DOM per `<link>` einbinden. Dann genügt `style-src 'self' https://honeyos…`,
|
||||
und die CSP der fremden App bleibt streng. Kostet eine zweite Anfrage, die
|
||||
zwischengespeichert wird.
|
||||
**Anders gelöst als hier geplant.** Der Plan war, die Stile als eigene Datei
|
||||
auszuliefern und per `<link>` einzubinden. Das hätte `'unsafe-inline'` gegen
|
||||
`style-src … https://honeyos…` getauscht — eine CSP-Änderung gegen eine andere,
|
||||
plus eine zweite Anfrage. Stattdessen hängt die HoneyBar ihre Stile jetzt als
|
||||
konstruiertes Stylesheet (`adoptedStyleSheets`) ein: Die CSP greift nur auf
|
||||
Markup, nicht auf die CSSOM. Damit braucht die Gastgeber-App **gar keine
|
||||
`style-src`-Erlaubnis** mehr, und es bleibt bei einer Datei ohne zweite Anfrage.
|
||||
|
||||
Zu prüfen ist dabei, was sonst noch inline gesetzt wird: die Lage der HoneyBar
|
||||
selbst und der Innenabstand, den sie der Seite verpasst. Über die CSSOM gesetzte
|
||||
Stile (`el.style.x = …`) fallen nicht unter die CSP — was im Markup steht, schon.
|
||||
Der Strich zum Wiederausklappen hat seinen eigenen Shadow-Root und wäre sonst
|
||||
das einzige Stück ohne Farbe geblieben — er geht denselben Weg.
|
||||
|
||||
Zwei Fallen dabei: Der Rückfall für alte Browser hängt ein `<style>` in den
|
||||
Root, also muss er **nach** `innerHTML` laufen, sonst räumt das Markup ihn
|
||||
gleich wieder weg. Und `el.style.…` war nie das Problem — das ist schon CSSOM.
|
||||
|
||||
### Bild-Widget — ✅ gebaut (30.08.2026)
|
||||
|
||||
|
||||
Reference in new issue
Block a user