diff --git a/client/homebrew/brewRenderer/safeHTML.js b/client/homebrew/brewRenderer/safeHTML.js index d9438b663..ca2e59d5f 100644 --- a/client/homebrew/brewRenderer/safeHTML.js +++ b/client/homebrew/brewRenderer/safeHTML.js @@ -32,12 +32,12 @@ function safeHTML(htmlString) { return; } // Check remaining elements for blacklisted attributes - for (const attribute of element.attributes){ + [...element.attributes].forEach((attribute)=>{ if(blacklistAttrs.some((test)=>{return test(attribute);})) { - element.removeAttribute(attribute.localName); - break; + element.removeAttribute(attribute.name); + return; }; - }; + }); }); return div.innerHTML; diff --git a/tests/html/safeHTML.test.js b/tests/html/safeHTML.test.js index 0b5b4c169..71ab668ba 100644 --- a/tests/html/safeHTML.test.js +++ b/tests/html/safeHTML.test.js @@ -43,6 +43,12 @@ test('Javascript via inline event handler - onMouseOver', function() { expect(rendered).toBe('
Hover over me
'); }); +test('Javascript via multiple inline event handlers - onClick + onMouseOver', function() { + const source = `
Hover over or Click me
`; + const rendered = safeHTML(source); + expect(rendered).toBe('
Hover over or Click me
'); +}); + test('Javascript via data attribute', function() { const source = `
Test
`; const rendered = safeHTML(source);