parent
6c5b653593
commit
98cef76931
@ -231,11 +231,11 @@ function stripCustomNsAttrs(el: any) {
|
|||||||
* Sanitizes the given unsafe, untrusted HTML fragment, and returns HTML text that is safe to add to
|
* Sanitizes the given unsafe, untrusted HTML fragment, and returns HTML text that is safe to add to
|
||||||
* the DOM in a browser environment.
|
* the DOM in a browser environment.
|
||||||
*/
|
*/
|
||||||
export function sanitizeHtml(unsafeHtml: string): string {
|
export function sanitizeHtml(unsafeHtmlInput: string): string {
|
||||||
try {
|
try {
|
||||||
let containerEl = getInertElement();
|
const containerEl = getInertElement();
|
||||||
// Make sure unsafeHtml is actually a string (TypeScript types are not enforced at runtime).
|
// Make sure unsafeHtml is actually a string (TypeScript types are not enforced at runtime).
|
||||||
unsafeHtml = unsafeHtml ? String(unsafeHtml) : '';
|
let unsafeHtml = unsafeHtmlInput ? String(unsafeHtmlInput) : '';
|
||||||
|
|
||||||
// mXSS protection. Repeatedly parse the document to make sure it stabilizes, so that a browser
|
// mXSS protection. Repeatedly parse the document to make sure it stabilizes, so that a browser
|
||||||
// trying to auto-correct incorrect HTML cannot cause formerly inert HTML to become dangerous.
|
// trying to auto-correct incorrect HTML cannot cause formerly inert HTML to become dangerous.
|
||||||
@ -266,7 +266,7 @@ export function sanitizeHtml(unsafeHtml: string): string {
|
|||||||
DOM.removeChild(parent, child);
|
DOM.removeChild(parent, child);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isDevMode() && safeHtml !== unsafeHtml) {
|
if (isDevMode() && safeHtml !== unsafeHtmlInput) {
|
||||||
DOM.log('WARNING: sanitizing HTML stripped some content.');
|
DOM.log('WARNING: sanitizing HTML stripped some content.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,6 +51,10 @@ export function main() {
|
|||||||
t.expect(sanitizeHtml('<?pi nodes?>no.')).toEqual('no.');
|
t.expect(sanitizeHtml('<?pi nodes?>no.')).toEqual('no.');
|
||||||
t.expect(logMsgs.join('\n')).toMatch(/sanitizing HTML stripped some content/);
|
t.expect(logMsgs.join('\n')).toMatch(/sanitizing HTML stripped some content/);
|
||||||
});
|
});
|
||||||
|
t.it('supports sanitizing escaped entities', () => {
|
||||||
|
t.expect(sanitizeHtml('🚀')).toEqual('🚀');
|
||||||
|
t.expect(logMsgs).toEqual([]);
|
||||||
|
});
|
||||||
t.it('escapes entities', () => {
|
t.it('escapes entities', () => {
|
||||||
t.expect(sanitizeHtml('<p>Hello < World</p>')).toEqual('<p>Hello < World</p>');
|
t.expect(sanitizeHtml('<p>Hello < World</p>')).toEqual('<p>Hello < World</p>');
|
||||||
t.expect(sanitizeHtml('<p>Hello < World</p>')).toEqual('<p>Hello < World</p>');
|
t.expect(sanitizeHtml('<p>Hello < World</p>')).toEqual('<p>Hello < World</p>');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user