diff --git a/library/Icinga/Util/Csp.php b/library/Icinga/Util/Csp.php index 44716c4bd..a82c9cb67 100644 --- a/library/Icinga/Util/Csp.php +++ b/library/Icinga/Util/Csp.php @@ -157,12 +157,26 @@ class Csp { $config = Config::app(); if ($config->get('security', 'use_custom_csp', 'y') === 'y') { - return $config->get('security', 'custom_csp', ''); + return self::getCustomContentSecurityPolicy(); } return self::getAutomaticContentSecurityPolicy(); } + public static function getCustomContentSecurityPolicy(): ?string + { + $csp = static::getInstance(); + + if (empty($csp->styleNonce)) { + throw new RuntimeException('No nonce set for CSS'); + } + + $config = Config::app(); + $raw = $config->get('security', 'custom_csp'); + $formated = str_replace('{style_nonce}', "'nonce{$csp->styleNonce}'", $raw); + return $formated; + } + /** * Get the automatically generated Content-Security-Policy. *