[SECURITY] Prevent XSS in ContentObjectRenderer 77/49077/2
authorBenni Mack <benni@typo3.org>
Tue, 19 Jul 2016 10:17:26 +0000 (12:17 +0200)
committerOliver Hader <oliver.hader@typo3.org>
Tue, 19 Jul 2016 10:17:29 +0000 (12:17 +0200)
Properly escape various parameters.

Resolves: #31244
Releases: master, 7.6, 6.2
Security-Commit: 1efa6adc7b1d332c384779451626e34059e30d8d
Security-Bulletins: TYPO3-CORE-SA-2016-014, 015, 016, 017, 018
Change-Id: I66c30eff40fa530477380443e86857233bb09b49
Reviewed-on: https://review.typo3.org/49077
Reviewed-by: Oliver Hader <oliver.hader@typo3.org>
Tested-by: Oliver Hader <oliver.hader@typo3.org>
typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php

index 7bd7909..d49b917 100644 (file)
@@ -1463,7 +1463,7 @@ class ContentObjectRenderer
                     . '); return false;';
                 $a1 = '<a href="' . htmlspecialchars($url) . '"'
                     . ' onclick="' . htmlspecialchars($onClick) . '"'
-                    . ($target !== '' ? ' target="' . $target . '"' : '')
+                    . ($target !== '' ? ' target="' . htmlspecialchars($target) . '"' : '')
                     . $this->getTypoScriptFrontendController()->ATagParams . '>';
                 $a2 = '</a>';
                 $this->getTypoScriptFrontendController()->setJS('openPic');
@@ -1497,7 +1497,7 @@ class ContentObjectRenderer
             if ($extension === 'jpg' || $extension === 'jpeg' || $extension === 'gif' || $extension === 'png') {
                 $imgFile = $incFile;
                 $imgInfo = @getimagesize($imgFile);
-                return '<img src="' . $tsfe->absRefPrefix . $imgFile . '" width="' . (int)$imgInfo[0] . '" height="' . (int)$imgInfo[1] . '"' . $this->getBorderAttr(' border="0"') . ' ' . $addParams . ' />';
+                return '<img src="' . htmlspecialchars($tsfe->absRefPrefix . $imgFile) . '" width="' . (int)$imgInfo[0] . '" height="' . (int)$imgInfo[1] . '"' . $this->getBorderAttr(' border="0"') . ' ' . $addParams . ' />';
             } elseif (filesize($incFile) < 1024 * 1024) {
                 return $tsfe->tmpl->fileContent($incFile);
             }
@@ -3084,7 +3084,7 @@ class ContentObjectRenderer
     {
         $wrapAlign = trim($conf['wrapAlign']);
         if ($wrapAlign) {
-            $content = $this->wrap($content, '<div style="text-align:' . $wrapAlign . ';">|</div>');
+            $content = $this->wrap($content, '<div style="text-align:' . htmlspecialchars($wrapAlign) . ';">|</div>');
         }
         return $content;
     }
@@ -5036,7 +5036,7 @@ class ContentObjectRenderer
                     $linkUrl = $this->processUrl(UrlProcessorInterface::CONTEXT_COMMON, $scheme . $parts[0], $conf);
 
                     $res = '<a href="' . htmlspecialchars($linkUrl) . '"'
-                        . ($target !== '' ? ' target="' . $target . '"' : '')
+                        . ($target !== '' ? ' target="' . htmlspecialchars($target) . '"' : '')
                         . $aTagParams . $this->extLinkATagParams(('http://' . $parts[0]), 'url') . '>';
 
                     $wrap = isset($conf['wrap.']) ? $this->stdWrap($conf['wrap'], $conf['wrap.']) : $conf['wrap'];
@@ -5898,7 +5898,7 @@ class ContentObjectRenderer
 
                 $this->lastTypoLinkTarget = $target;
                 $finalTagParts['url'] = $this->lastTypoLinkUrl;
-                $finalTagParts['targetParams'] = $target ? ' target="' . $target . '"' : '';
+                $finalTagParts['targetParams'] = $target ? ' target="' . htmlspecialchars($target) . '"' : '';
                 $finalTagParts['aTagParams'] .= $this->extLinkATagParams($finalTagParts['url'], $linkType);
             break;
 
@@ -5922,7 +5922,7 @@ class ContentObjectRenderer
                     }
                     $this->lastTypoLinkTarget = $target;
                     $finalTagParts['url'] = $this->lastTypoLinkUrl;
-                    $finalTagParts['targetParams'] = $target ? ' target="' . $target . '"' : '';
+                    $finalTagParts['targetParams'] = $target ? ' target="' . htmlspecialchars($target) . '"' : '';
                     $finalTagParts['aTagParams'] .= $this->extLinkATagParams($finalTagParts['url'], $linkType);
                 } else {
                     $this->getTimeTracker()->setTSlogMessage('typolink(): File "' . $splitLinkParam[0] . '" did not exist, so "' . $linkText . '" was not linked.', 1);
@@ -6199,7 +6199,7 @@ class ContentObjectRenderer
                 . $target
                 . ' onclick="' . htmlspecialchars($onClick) . '"'
                 . ((string)$title !== '' ? ' title="' . htmlspecialchars($title) . '"' : '')
-                . ($linkClass !== '' ? ' class="' . $linkClass . '"' : '')
+                . ($linkClass !== '' ? ' class="' . htmlspecialchars($linkClass) . '"' : '')
                 . $finalTagParts['aTagParams']
                 . '>';
         } else {
@@ -6210,7 +6210,7 @@ class ContentObjectRenderer
             }
             $finalAnchorTag .= ((string)$title !== '' ? ' title="' . htmlspecialchars($title) . '"' : '')
                 . $finalTagParts['targetParams']
-                . ($linkClass ? ' class="' . $linkClass . '"' : '')
+                . ($linkClass ? ' class="' . htmlspecialchars($linkClass) . '"' : '')
                 . $finalTagParts['aTagParams']
                 . '>';
         }