[BUGFIX] Include CORS settings attribute when using integrity 96/50196/2
authorXavier Perseguers <xavier@typo3.org>
Wed, 12 Oct 2016 12:36:30 +0000 (14:36 +0200)
committerXavier Perseguers <xavier@typo3.org>
Thu, 13 Oct 2016 09:35:37 +0000 (11:35 +0200)
For Subresource Integrity to work, the CDN must support
Cross-Origin Resource Sharing (CORS). The `crossorigin` attribute
enforces a CORS-enabled load. The anonymous value means that the
browser should omit any cookies or authentication that the user
may have associated with the domain. This prevents cross-origin
data leaks, and also makes the request smaller.

Change-Id: I13d1908c7d6e29686cbc27d7abe93c2c4bb7c340
Resolves: #78262
Releases: master, 7.6
Reviewed-on: https://review.typo3.org/50196
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Frank Naegler <frank.naegler@typo3.org>
Tested-by: Frank Naegler <frank.naegler@typo3.org>
Reviewed-by: Mathias Brodala <mbrodala@pagemachine.de>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Mathias Brodala <mbrodala@pagemachine.de>
Reviewed-by: Xavier Perseguers <xavier@typo3.org>
Tested-by: Xavier Perseguers <xavier@typo3.org>
typo3/sysext/core/Classes/Page/PageRenderer.php

index c978dcd..3bd37a3 100644 (file)
@@ -2348,7 +2348,7 @@ class PageRenderer implements \TYPO3\CMS\Core\SingletonInterface
             foreach ($this->jsLibs as $properties) {
                 $properties['file'] = $this->getStreamlinedFileName($properties['file']);
                 $async = ($properties['async']) ? ' async="async"' : '';
-                $integrity = ($properties['integrity']) ? ' integrity="' . htmlspecialchars($properties['integrity']) . '"' : '';
+                $integrity = ($properties['integrity']) ? ' integrity="' . htmlspecialchars($properties['integrity']) . '" crossorigin="anonymous"' : '';
                 $tag = '<script src="' . htmlspecialchars($properties['file']) . '" type="' . htmlspecialchars($properties['type']) . '"' . $async . $integrity . '></script>';
                 if ($properties['allWrap']) {
                     $wrapArr = explode($properties['splitChar'] ?: '|', $properties['allWrap'], 2);
@@ -2390,7 +2390,7 @@ class PageRenderer implements \TYPO3\CMS\Core\SingletonInterface
             foreach ($this->jsFiles as $file => $properties) {
                 $file = $this->getStreamlinedFileName($file);
                 $async = ($properties['async']) ? ' async="async"' : '';
-                $integrity = ($properties['integrity']) ? ' integrity="' . htmlspecialchars($properties['integrity']) . '"' : '';
+                $integrity = ($properties['integrity']) ? ' integrity="' . htmlspecialchars($properties['integrity']) . '" crossorigin="anonymous"' : '';
                 $tag = '<script src="' . htmlspecialchars($file) . '" type="' . htmlspecialchars($properties['type']) . '"' . $async . $integrity . '></script>';
                 if ($properties['allWrap']) {
                     $wrapArr = explode($properties['splitChar'] ?: '|', $properties['allWrap'], 2);