function escapeHtml(s) { var amp = /&/g, lt = //g; return s.toString() .replace(amp, '&') .replace(lt, '<') .replace(gt, '>'); } function escapeAttr(s) { return s.toString() .replace(/'/g, '%22') .replace(/"/g, '%27'); } function test() { var tainted = window.name; // $ Source var elt = document.createElement(); elt.innerHTML = "" + escapeHtml(tainted) + ""; elt.innerHTML = "
" + escapeAttr(tainted) + "
"; // $ MISSING: Alert - not flagged - const regex = /[<>'"&]/; if (regex.test(tainted)) { elt.innerHTML = '' + tainted + ''; // $ Alert } else { elt.innerHTML = '' + tainted + ''; } if (!regex.test(tainted)) { elt.innerHTML = '' + tainted + ''; } else { elt.innerHTML = '' + tainted + ''; // $ Alert } if (regex.exec(tainted)) { elt.innerHTML = '' + tainted + ''; // $ Alert } else { elt.innerHTML = '' + tainted + ''; } if (regex.exec(tainted) != null) { elt.innerHTML = '' + tainted + ''; // $ Alert } else { elt.innerHTML = '' + tainted + ''; } if (regex.exec(tainted) == null) { elt.innerHTML = '' + tainted + ''; } else { elt.innerHTML = '' + tainted + ''; // $ Alert } elt.innerHTML = tainted.replace(/<\w+/g, ''); // $ Alert }