diff --git a/conf/configuration.go b/conf/configuration.go index 22a823d87..2efce191c 100644 --- a/conf/configuration.go +++ b/conf/configuration.go @@ -80,6 +80,7 @@ type configOptions struct { PasswordEncryptionKey string ReverseProxyUserHeader string ReverseProxyWhitelist string + HTTPSecurityHeaders secureOptions Prometheus prometheusOptions Scanner scannerOptions Jukebox jukeboxOptions @@ -141,6 +142,10 @@ type listenBrainzOptions struct { BaseURL string } +type secureOptions struct { + CustomFrameOptionsValue string +} + type prometheusOptions struct { Enabled bool MetricsPath string @@ -295,6 +300,7 @@ func init() { viper.SetDefault("baseurl", "") viper.SetDefault("tlscert", "") viper.SetDefault("tlskey", "") + viper.SetDefault("httpsecurityheaders.customframeoptionsvalue", "DENY") viper.SetDefault("uiloginbackgroundurl", consts.DefaultUILoginBackgroundURL) viper.SetDefault("uiwelcomemessage", "") viper.SetDefault("maxsidebarplaylists", consts.DefaultMaxSidebarPlaylists) diff --git a/server/middlewares.go b/server/middlewares.go index 7bbfbd0d6..dd4d62660 100644 --- a/server/middlewares.go +++ b/server/middlewares.go @@ -98,10 +98,11 @@ func corsHandler() func(http.Handler) http.Handler { func secureMiddleware() func(http.Handler) http.Handler { sec := secure.New(secure.Options{ - ContentTypeNosniff: true, - FrameDeny: true, - ReferrerPolicy: "same-origin", - PermissionsPolicy: "autoplay=(), camera=(), microphone=(), usb=()", + ContentTypeNosniff: true, + FrameDeny: true, + ReferrerPolicy: "same-origin", + PermissionsPolicy: "autoplay=(), camera=(), microphone=(), usb=()", + CustomFrameOptionsValue: conf.Server.HTTPSecurityHeaders.CustomFrameOptionsValue, //ContentSecurityPolicy: "script-src 'self' 'unsafe-inline'", }) return sec.Handler