@@ -133,12 +133,11 @@ private function updateCspHeaders(Response $response, array $nonces = [])
133
133
continue ;
134
134
}
135
135
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 )) {
140
137
continue ;
141
138
}
139
+
140
+ $ headers [$ header ][$ type ] = $ fallback ;
142
141
}
143
142
$ ruleIsSet = true ;
144
143
if (!\in_array ('\'unsafe-inline \'' , $ headers [$ header ][$ type ], true )) {
@@ -218,9 +217,7 @@ private function authorizesInline(array $directivesSet, $type)
218
217
{
219
218
if (isset ($ directivesSet [$ type ])) {
220
219
$ directives = $ directivesSet [$ type ];
221
- } elseif (isset ($ directivesSet ['default-src ' ])) {
222
- $ directives = $ directivesSet ['default-src ' ];
223
- } else {
220
+ } elseif (null === $ directives = $ this ->getDirectiveFallback ($ directivesSet , $ type )) {
224
221
return false ;
225
222
}
226
223
@@ -244,6 +241,16 @@ private function hasHashOrNonce(array $directives)
244
241
return false ;
245
242
}
246
243
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
+
247
254
/**
248
255
* Retrieves the Content-Security-Policy headers (either X-Content-Security-Policy or Content-Security-Policy) from
249
256
* a response.
0 commit comments