diff --git a/server/modules/rendering/html-core/definition.yml b/server/modules/rendering/html-core/definition.yml index c11da260..2fe4783c 100644 --- a/server/modules/rendering/html-core/definition.yml +++ b/server/modules/rendering/html-core/definition.yml @@ -18,3 +18,12 @@ props: title: Open external links in a new tab hint: External links will have a _blank target attribute added automatically. order: 2 + relAttributeExternalLink: + type: String + default: noreferrer + title: Protect against XSS when opening _blank target links + hint: External links with _blank attribute will have an additional rel attribute. + order: 3 + enum: + - noreferrer + - noopener diff --git a/server/modules/rendering/html-core/renderer.js b/server/modules/rendering/html-core/renderer.js index 55cb4318..50c2947f 100644 --- a/server/modules/rendering/html-core/renderer.js +++ b/server/modules/rendering/html-core/renderer.js @@ -115,6 +115,7 @@ module.exports = { $(elm).addClass(`is-external-link`) if (this.config.openExternalLinkNewTab) { $(elm).attr('target', '_blank') + $(elm).attr('rel', this.config.relAttributeExternalLink) } } diff --git a/server/modules/rendering/html-security/renderer.js b/server/modules/rendering/html-security/renderer.js index 4e40e654..21d44fef 100644 --- a/server/modules/rendering/html-security/renderer.js +++ b/server/modules/rendering/html-security/renderer.js @@ -6,7 +6,7 @@ module.exports = { input = xss(input, { whiteList: { ...xss.whiteList, - a: ['class', 'id', 'href', 'style', 'target', 'title'], + a: ['class', 'id', 'href', 'style', 'target', 'title', 'rel'], blockquote: ['class', 'id', 'style'], code: ['class', 'style'], details: ['class', 'style'],