Skip to content
Snippets Groups Projects
Commit 1e026a62 authored by Oliver Hader's avatar Oliver Hader Committed by Oliver Hader
Browse files

[BUGFIX] Allow CSP inline styles in directly requested SVG files

Using CSP directive `style-src 'unsafe-inline'` seems to be fine
for directly requested SVG files, since corresponding definitions
are bound to the corresponding resource. Loading styles from any
other external resource is still denied.

Resolves: #93884
Releases: main, 11.5, 10.4
Change-Id: Ifddf8782ecaa81bf26026ae8850d8c53b7977bd7
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/75594


Reviewed-by: default avatarFrank Nägler <frank.naegler@typo3.com>
Tested-by: default avatarcore-ci <typo3@b13.com>
Tested-by: default avatarTorben Hansen <derhansen@gmail.com>
Tested-by: default avatarStefan Bürk <stefan@buerk.tech>
Reviewed-by: default avatarOliver Hader <oliver.hader@typo3.org>
Tested-by: default avatarOliver Hader <oliver.hader@typo3.org>
Reviewed-by: default avatarMarkus Klein <markus.klein@typo3.org>
Tested-by: default avatarFrank Nägler <frank.naegler@typo3.com>
Reviewed-by: default avatarStefan Bürk <stefan@buerk.tech>
Reviewed-by: default avatarTorben Hansen <derhansen@gmail.com>
parent d047811e
Branches
Tags
No related merge requests found
......@@ -240,9 +240,13 @@ class FileDumpController
{
$extension = PathUtility::pathinfo($file->getName(), PATHINFO_EXTENSION);
// same as in `typo3/sysext/install/Resources/Private/FolderStructureTemplateFiles/resources-root-htaccess`
$policy = $extension === 'pdf' || $response->getHeaderLine('content-type') === 'application/pdf'
? "default-src 'self' 'unsafe-inline'; script-src 'none'; object-src 'self'; plugin-types application/pdf;"
: "default-src 'self'; script-src 'none'; style-src 'none'; object-src 'none';";
if ($extension === 'pdf' || $response->getHeaderLine('content-type') === 'application/pdf') {
$policy = "default-src 'self' 'unsafe-inline'; script-src 'none'; object-src 'self'; plugin-types application/pdf;";
} elseif ($extension === 'svg' || $response->getHeaderLine('content-type') === 'image/svg+xml') {
$policy = "default-src 'self'; script-src 'none'; style-src 'unsafe-inline'; object-src 'none';";
} else {
$policy = "default-src 'self'; script-src 'none'; style-src 'none'; object-src 'none';";
}
return $response->withAddedHeader('content-security-policy', $policy);
}
}
......@@ -7,8 +7,12 @@
<FilesMatch "\.pdf$">
Header set Content-Security-Policy "default-src 'self' 'unsafe-inline'; script-src 'none'; object-src 'self'; plugin-types application/pdf;"
</FilesMatch>
# matching requested *.svg files only (allows using inline styles when serving SVG files)
<FilesMatch "\.svg">
Header set Content-Security-Policy "default-src 'self'; script-src 'none'; style-src 'unsafe-inline'; object-src 'none';"
</FilesMatch>
# matching anything else, using negative lookbehind pattern
<FilesMatch "(?<!\.pdf)$">
<FilesMatch "(?<!\.(?:pdf|svg))$">
Header set Content-Security-Policy "default-src 'self'; script-src 'none'; style-src 'none'; object-src 'none';"
</FilesMatch>
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment