diff --git a/core/modules/system/js/system.date.es6.js b/core/modules/system/js/system.date.es6.js index c011ddd99d68..91b177309fc4 100644 --- a/core/modules/system/js/system.date.es6.js +++ b/core/modules/system/js/system.date.es6.js @@ -43,7 +43,7 @@ (key, value) => (dateFormats[key] ? dateFormats[key] : value), ); - $preview.html(dateString); + $preview.text(dateString); $target.toggleClass('js-hide', !dateString.length); } diff --git a/core/modules/system/js/system.date.js b/core/modules/system/js/system.date.js index 1c80ad7922ae..785a5c65fb55 100644 --- a/core/modules/system/js/system.date.js +++ b/core/modules/system/js/system.date.js @@ -25,7 +25,7 @@ return dateFormats[key] ? dateFormats[key] : value; }); - $preview.html(dateString); + $preview.text(dateString); $target.toggleClass('js-hide', !dateString.length); } diff --git a/core/modules/system/tests/src/FunctionalJavascript/System/DateFormatTest.php b/core/modules/system/tests/src/FunctionalJavascript/System/DateFormatTest.php new file mode 100644 index 000000000000..4a0c02b01e89 --- /dev/null +++ b/core/modules/system/tests/src/FunctionalJavascript/System/DateFormatTest.php @@ -0,0 +1,63 @@ +drupalLogin($this->drupalCreateUser(['administer site configuration'])); + $this->drupalPlaceBlock('local_actions_block'); + } + + /** + * Tests XSS via date format configuration. + */ + public function testDateFormatXss() { + $page = $this->getSession()->getPage(); + $assert = $this->assertSession(); + + $date_format = DateFormat::create([ + 'id' => 'xss_short', + 'label' => 'XSS format', + 'pattern' => '\<\s\c\r\i\p\t\>\a\l\e\r\t\(\"\X\S\S\")\;\<\/\s\c\r\i\p\t\>', + ]); + $date_format->save(); + $this->drupalGet('admin/config/regional/date-time'); + $assert->assertEscaped('', 'The date format was properly escaped'); + $this->drupalGet('admin/config/regional/date-time/formats/manage/xss_short'); + $assert->assertEscaped('', 'The date format was properly escaped'); + + // Add a new date format with HTML in it. + $this->drupalGet('admin/config/regional/date-time/formats/add'); + $date_format = '& \<\e\m\>Y\<\/\e\m\>'; + $page->fillField('date_format_pattern', $date_format); + $assert->waitForText('Displayed as'); + $assert->assertEscaped('' . date("Y") . ''); + $page->fillField('label', 'date_html_pattern'); + // Wait for the machine name ID to be completed. + $assert->waitForLink('Edit'); + $page->pressButton('Add format'); + $assert->pageTextContains('Custom date format added.'); + $assert->assertEscaped('' . date("Y") . ''); + } + +}