[SECURITY] Fix several XSS issues 76/45276/2
authorNicole Cordes <typo3@cordes.co>
Tue, 15 Dec 2015 10:36:26 +0000 (11:36 +0100)
committerOliver Hader <oliver.hader@typo3.org>
Tue, 15 Dec 2015 10:36:35 +0000 (11:36 +0100)
Resolves: #59150
Releases: master, 6.2
Security-Bulletins: TYPO3-CORE-SA-2015-010, 011, 012, 013, 014, 015
Change-Id: I93386ba95b02713368b8155b73a6da620c3795c2
Reviewed-on: https://review.typo3.org/45276
Reviewed-by: Oliver Hader <oliver.hader@typo3.org>
Tested-by: Oliver Hader <oliver.hader@typo3.org>
typo3/sysext/backend/Classes/Controller/EditDocumentController.php
typo3/sysext/backend/Classes/Form/Wizard/SuggestWizard.php
typo3/sysext/rtehtmlarea/Classes/Form/Element/RichTextElement.php

index 240bae5..d3b0d54 100644 (file)
@@ -1178,8 +1178,8 @@ class EditDocumentController extends AbstractModule
                                     // @todo: looks ugly
                                     $html .= LF
                                         . '<input type="hidden"'
-                                        . ' name="data[' . $table . '][' . $formData['databaseRow']['uid'] . '][pid]"'
-                                        . ' value="' . $formData['databaseRow']['pid'] . '" />';
+                                        . ' name="data[' . htmlspecialchars($table) . '][' . htmlspecialchars($formData['databaseRow']['uid']) . '][pid]"'
+                                        . ' value="' . (int)$formData['databaseRow']['pid'] . '" />';
                                     $this->newC++;
                                 }
 
index 9379df3..75f205b 100644 (file)
@@ -82,14 +82,14 @@ class SuggestWizard
                        <div class="input-group">
                                <span class="input-group-addon">' . $iconFactory->getIcon('actions-search', Icon::SIZE_SMALL)->render() . '</span>
                                <input type="search" class="t3-form-suggest form-control"
-                                       placeholder="' . $languageService->sL('LLL:EXT:lang/locallang_core.xlf:labels.findRecord') . '"
-                                       data-fieldname="' . $fieldname . '"
-                                       data-table="' . $table . '"
-                                       data-field="' . $field . '"
-                                       data-uid="' . $row['uid'] . '"
-                                       data-pid="' . $row['pid'] . '"
-                                       data-fieldtype="' . $type . '"
-                                       data-minchars="' . $minChars . '"
+                                       placeholder="' . $languageService->sL('LLL:EXT:lang/locallang_core.xlf:labels.findRecord', true) . '"
+                                       data-fieldname="' . htmlspecialchars($fieldname) . '"
+                                       data-table="' . htmlspecialchars($table) . '"
+                                       data-field="' . htmlspecialchars($field) . '"
+                                       data-uid="' . htmlspecialchars($row['uid']) . '"
+                                       data-pid="' . (int)$row['pid'] . '"
+                                       data-fieldtype="' . htmlspecialchars($type) . '"
+                                       data-minchars="' . (int)$minChars . '"
                                        data-recorddata="' . htmlspecialchars($jsRow) . '"
                                />
                        </div>
index 6306c75..8d2be70 100644 (file)
@@ -653,16 +653,16 @@ class RichTextElement extends AbstractFormElement
         $jsArray[] = 'if (typeof configureEditorInstance === "undefined") {';
         $jsArray[] = ' configureEditorInstance = new Object();';
         $jsArray[] = '}';
-        $jsArray[] = 'configureEditorInstance["' . $this->domIdentifier . '"] = function() {';
+        $jsArray[] = 'configureEditorInstance[' . GeneralUtility::quoteJSvalue($this->domIdentifier) . '] = function() {';
         $jsArray[] = 'if (typeof RTEarea === "undefined" || typeof HTMLArea === "undefined") {';
         $jsArray[] = ' window.setTimeout("configureEditorInstance[' . GeneralUtility::quoteJSvalue($this->domIdentifier) . ']();", 40);';
         $jsArray[] = '} else {';
-        $jsArray[] = 'editornumber = "' . $this->domIdentifier . '";';
+        $jsArray[] = 'editornumber = ' . GeneralUtility::quoteJSvalue($this->domIdentifier) . ';';
         $jsArray[] = 'RTEarea[editornumber] = new Object();';
         $jsArray[] = 'RTEarea[editornumber].RTEtsConfigParams = "&RTEtsConfigParams=' . rawurlencode($this->RTEtsConfigParams()) . '";';
         $jsArray[] = 'RTEarea[editornumber].number = editornumber;';
         $jsArray[] = 'RTEarea[editornumber].deleted = false;';
-        $jsArray[] = 'RTEarea[editornumber].textAreaId = "' . $this->domIdentifier . '";';
+        $jsArray[] = 'RTEarea[editornumber].textAreaId = ' . GeneralUtility::quoteJSvalue($this->domIdentifier) . ';';
         $jsArray[] = 'RTEarea[editornumber].id = "RTEarea" + editornumber;';
         $jsArray[] = 'RTEarea[editornumber].RTEWidthOverride = "'
             . (isset($backendUser->uc['rteWidth']) && trim($backendUser->uc['rteWidth'])
@@ -765,7 +765,7 @@ class RichTextElement extends AbstractFormElement
         $jsArray[] = 'RTEarea.initEditor(editornumber);';
         $jsArray[] = '}';
         $jsArray[] = '}';
-        $jsArray[] = 'configureEditorInstance["' . $this->domIdentifier . '"]();';
+        $jsArray[] = 'configureEditorInstance[' . GeneralUtility::quoteJSvalue($this->domIdentifier) . ']();';
 
         $this->resultArray['additionalJavaScriptPost'][] =  implode(LF, $jsArray);
     }
@@ -1125,8 +1125,8 @@ class RichTextElement extends AbstractFormElement
     protected function addOnSubmitJavaScriptCode()
     {
         $onSubmitCode = array();
-        $onSubmitCode[] = 'if (RTEarea["' . $this->domIdentifier . '"]) {';
-        $onSubmitCode[] =    'document.editform["' . $this->data['parameterArray']['itemFormElName'] . '"].value = RTEarea["' . $this->domIdentifier . '"].editor.getHTML();';
+        $onSubmitCode[] = 'if (RTEarea[' . GeneralUtility::quoteJSvalue($this->domIdentifier) . ']) {';
+        $onSubmitCode[] =    'document.editform[' . GeneralUtility::quoteJSvalue($this->data['parameterArray']['itemFormElName']) . '].value = RTEarea[' . GeneralUtility::quoteJSvalue($this->domIdentifier) . '].editor.getHTML();';
         $onSubmitCode[] = '} else {';
         $onSubmitCode[] =    'OK = 0;';
         $onSubmitCode[] = '};';