diff --git a/resources/js/utils/sanitize.ts b/resources/js/utils/sanitize.ts index 2dc160d3f..18a6b2ddf 100644 --- a/resources/js/utils/sanitize.ts +++ b/resources/js/utils/sanitize.ts @@ -1,9 +1,16 @@ import DOMPurify from 'dompurify'; +DOMPurify.addHook('afterSanitizeAttributes', function (node) { + if (node.tagName === 'A' && !node.getAttribute('rel')?.includes('noopener')) { + node.setAttribute('rel', `${node.getAttribute('rel') ?? ''} noopener`.trim()); + } +}); + export function sanitize(html: string | null) { return html ? DOMPurify.sanitize(html, { ADD_TAGS: ['iframe'], + ADD_ATTR: ['target'], CUSTOM_ELEMENT_HANDLING: { tagNameCheck: () => true, attributeNameCheck: (name) => {