@@ -133,12 +133,11 @@ private function updateCspHeaders(Response $response, array $nonces = [])
133133 continue ;
134134 }
135135 if (!isset ($ headers [$ header ][$ type ])) {
136- if (isset ($ headers [$ header ]['default-src ' ])) {
137- $ headers [$ header ][$ type ] = $ headers [$ header ]['default-src ' ];
138- } else {
139- // If there is no script-src/style-src and no default-src, no additional rules required.
136+ if (null === $ fallback = $ this ->getDirectiveFallback ($ directives , $ type )) {
140137 continue ;
141138 }
139+
140+ $ headers [$ header ][$ type ] = $ fallback ;
142141 }
143142 $ ruleIsSet = true ;
144143 if (!\in_array ('\'unsafe-inline \'' , $ headers [$ header ][$ type ], true )) {
@@ -218,9 +217,7 @@ private function authorizesInline(array $directivesSet, $type)
218217 {
219218 if (isset ($ directivesSet [$ type ])) {
220219 $ directives = $ directivesSet [$ type ];
221- } elseif (isset ($ directivesSet ['default-src ' ])) {
222- $ directives = $ directivesSet ['default-src ' ];
223- } else {
220+ } elseif (null === $ directives = $ this ->getDirectiveFallback ($ directivesSet , $ type )) {
224221 return false ;
225222 }
226223
@@ -244,6 +241,16 @@ private function hasHashOrNonce(array $directives)
244241 return false ;
245242 }
246243
244+ private function getDirectiveFallback (array $ directiveSet , $ type )
245+ {
246+ if (\in_array ($ type , ['script-src-elem ' , 'style-src-elem ' ], true ) || !isset ($ directiveSet ['default-src ' ])) {
247+ // Let the browser fallback on it's own
248+ return null ;
249+ }
250+
251+ return $ directiveSet ['default-src ' ];
252+ }
253+
247254 /**
248255 * Retrieves the Content-Security-Policy headers (either X-Content-Security-Policy or Content-Security-Policy) from
249256 * a response.
0 commit comments