diff --git a/packages/core/src/util/dom.ts b/packages/core/src/util/dom.ts index c8f9845b12..805daa5a92 100644 --- a/packages/core/src/util/dom.ts +++ b/packages/core/src/util/dom.ts @@ -6,18 +6,15 @@ * found in the LICENSE file at https://angular.io/license */ -const END_COMMENT = /(<|>)/g; -const END_COMMENT_ESCAPED = '\u200B$1\u200B'; +const END_COMMENT = /-->/g; +const END_COMMENT_ESCAPED = '-\u200B-\u200B>'; /** * Escape the content of the strings so that it can be safely inserted into a comment node. * * The issue is that HTML does not specify any way to escape comment end text inside the comment. - * Consider: `" or - * "--!>" at the end. -->`. Above the `"-->"` is meant to be text not an end to the comment. This - * can be created programmatically through DOM APIs. (`". -->`. Above the `"-->"` is meant to be text not + * an end to the comment. This can be created programmatically through DOM APIs. * * ``` * div.innerHTML = div.innerHTML @@ -29,7 +26,7 @@ const END_COMMENT_ESCAPED = '\u200B$1\u200B'; * may contain such text and expect them to be safe.) * * This function escapes the comment text by looking for the closing char sequence `-->` and replace - * it with `--_>_` where the `_` is a zero width space `\u200B`. The result is that if a comment + * it with `-_-_>` where the `_` is a zero width space `\u200B`. The result is that if a comment * contains `-->` text it will render normally but it will not cause the HTML parser to close the * comment. * diff --git a/packages/core/test/acceptance/security_spec.ts b/packages/core/test/acceptance/security_spec.ts index afc8b9ccd4..0376dcc1cf 100644 --- a/packages/core/test/acceptance/security_spec.ts +++ b/packages/core/test/acceptance/security_spec.ts @@ -11,33 +11,24 @@ import {TestBed} from '@angular/core/testing'; describe('comment node text escaping', () => { - // see: https://html.spec.whatwg.org/multipage/syntax.html#comments - ['>', // self closing - '-->', // standard closing - '--!>', // alternate closing - '', // embedded comment. - ].forEach((xssValue) => { - it('should not be possible to do XSS through comment reflect data when writing: ' + xssValue, - () => { - @Component({template: `