diff --git a/src/Forms/HTMLEditor/HTMLEditorSanitiser.php b/src/Forms/HTMLEditor/HTMLEditorSanitiser.php index a075d98fa9d..a979d1c2fed 100644 --- a/src/Forms/HTMLEditor/HTMLEditorSanitiser.php +++ b/src/Forms/HTMLEditor/HTMLEditorSanitiser.php @@ -347,7 +347,7 @@ public function sanitise(HTMLValue $html) } // Matches "javascript:" with any arbitrary linebreaks inbetween the characters. - $regex = '/^\s*' . implode('\s*', str_split('javascript:')) . '/i'; + $regex = '#^\s*(' . implode('\s*', str_split('javascript:')) . '|' . implode('\s*', str_split('data:text/html;')) . ')#i'; // Strip out javascript execution in href or src attributes. foreach (['src', 'href', 'data'] as $dangerAttribute) { if ($el->hasAttribute($dangerAttribute)) { diff --git a/tests/php/Forms/HTMLEditor/HTMLEditorSanitiserTest.php b/tests/php/Forms/HTMLEditor/HTMLEditorSanitiserTest.php index 3d5c3d5c684..ac7272dc2c0 100644 --- a/tests/php/Forms/HTMLEditor/HTMLEditorSanitiserTest.php +++ b/tests/php/Forms/HTMLEditor/HTMLEditorSanitiserTest.php @@ -120,7 +120,31 @@ public function testSanitisation() 'object[data]', '', '', - 'Object with dangerous content in data attribute is completely removed' + 'Object with dangerous javascript content in data attribute is completely removed' + ], + [ + 'object[data]', + '', + '', + 'Object with dangerous javascript content in data attribute with quotes is completely removed' + ], + [ + 'object[data]', + '', + '', + 'Object with dangerous html content in data attribute is completely removed' + ], + [ + 'object[data]', + '