diff --git a/backend/cmd/aether/main.go b/backend/cmd/aether/main.go
index 11ac8ba..ad6d7e6 100644
--- a/backend/cmd/aether/main.go
+++ b/backend/cmd/aether/main.go
@@ -314,7 +314,13 @@ func main() {
r.Use(chimiddleware.RequestID)
r.Use(middleware.TrustedProxy(cfg))
r.Use(middleware.Logger)
- r.Use(middleware.SecurityHeaders(officeFrameSrc))
+ r.Use(middleware.SecurityHeaders(middleware.CSP{
+ FrameSrc: []string{officeFrameSrc},
+ // Die HoneyOS-Leiste kommt als Skript von dort und holt sich von dort
+ // auch ihre App-Liste. Leer = keine Leiste und die alte, engere Regel.
+ ScriptSrc: []string{cfg.HoneybarOrigin},
+ ConnectSrc: []string{cfg.HoneybarOrigin},
+ }))
r.Use(chimiddleware.Recoverer)
r.Get("/health", func(w http.ResponseWriter, r *http.Request) {
diff --git a/backend/pkg/config/config.go b/backend/pkg/config/config.go
index 4135dd5..ceea9c4 100644
--- a/backend/pkg/config/config.go
+++ b/backend/pkg/config/config.go
@@ -78,6 +78,14 @@ type Config struct {
// eigenen internen Namen – die Adresse muss also umgeschrieben werden.
// Leer heißt: dieselbe wie OfficeURL.
OfficePublicURL string
+
+ // HoneybarOrigin ist der Ursprung, von dem die HoneyOS-Leiste geladen wird
+ // (z. B. https://os.example.com). Er wird in die CSP aufgenommen — ohne das
+ // blockt der Browser das Skript und dessen Anfragen.
+ //
+ // Muss zur Adresse im
+
+
+