Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save geoffa/441518 to your computer and use it in GitHub Desktop.
Save geoffa/441518 to your computer and use it in GitHub Desktop.
//
// While TinyMCE can strip out <script> tags,
// it does not remove inline JS event handlers.
//
// Example: onmouseover, onclick, etc.
//
// This should be included at the bottom of a page,
// contained inside an <iframe> to sandbox user-created
// content. The reason it is contained in an <iframe>
// is to prevent user-created CSS from affecting
// the parent page's overall look and feel.
//
(function() {
var all = document.getElementsByTagName('*');
var i = all.length;
while (i--) {
// Keeps links from opening within the <iframe>
if (all[i].tagName.toLowerCase() === 'a' && all[i].target !== '_blank') {
all[i].target = '_top';
}
// Remove all inline event handers - HTML5 events too.
all[i].removeAttribute('onabort');
all[i].removeAttribute('onafterprint');
all[i].removeAttribute('onbeforeonload');
all[i].removeAttribute('onbeforeprint');
all[i].removeAttribute('onblur');
all[i].removeAttribute('onblur');
all[i].removeAttribute('oncanplay');
all[i].removeAttribute('oncanplaythrough');
all[i].removeAttribute('onchange');
all[i].removeAttribute('onclick');
all[i].removeAttribute('oncontextmenu');
all[i].removeAttribute('ondblclick');
all[i].removeAttribute('ondrag');
all[i].removeAttribute('ondragend');
all[i].removeAttribute('ondragenter');
all[i].removeAttribute('ondragleave');
all[i].removeAttribute('ondragover');
all[i].removeAttribute('ondragstart');
all[i].removeAttribute('ondrop');
all[i].removeAttribute('ondurationchange');
all[i].removeAttribute('onemptied');
all[i].removeAttribute('onended');
all[i].removeAttribute('onerror');
all[i].removeAttribute('onerror');
all[i].removeAttribute('onfocus');
all[i].removeAttribute('onfocus');
all[i].removeAttribute('onformchange');
all[i].removeAttribute('onforminput');
all[i].removeAttribute('onhaschange');
all[i].removeAttribute('oninput');
all[i].removeAttribute('oninvalid');
all[i].removeAttribute('onkeydown');
all[i].removeAttribute('onkeypress');
all[i].removeAttribute('onkeyup');
all[i].removeAttribute('onload');
all[i].removeAttribute('onloadeddata');
all[i].removeAttribute('onloadedmetadata');
all[i].removeAttribute('onloadstart');
all[i].removeAttribute('onmessage');
all[i].removeAttribute('onmousedown');
all[i].removeAttribute('onmousemove');
all[i].removeAttribute('onmouseout');
all[i].removeAttribute('onmouseover');
all[i].removeAttribute('onmouseup');
all[i].removeAttribute('onmousewheel');
all[i].removeAttribute('onoffline');
all[i].removeAttribute('ononline');
all[i].removeAttribute('onpagehide');
all[i].removeAttribute('onpageshow');
all[i].removeAttribute('onpause');
all[i].removeAttribute('onplay');
all[i].removeAttribute('onplaying');
all[i].removeAttribute('onpopstate');
all[i].removeAttribute('onprogress');
all[i].removeAttribute('onratechange');
all[i].removeAttribute('onreadystatechange');
all[i].removeAttribute('onredo');
all[i].removeAttribute('onreset');
all[i].removeAttribute('onresize');
all[i].removeAttribute('onscroll');
all[i].removeAttribute('onseeked');
all[i].removeAttribute('onseeking');
all[i].removeAttribute('onselect');
all[i].removeAttribute('onstalled');
all[i].removeAttribute('onstorage');
all[i].removeAttribute('onsubmit');
all[i].removeAttribute('onsuspend');
all[i].removeAttribute('ontimeupdate');
all[i].removeAttribute('onundo');
all[i].removeAttribute('onunload');
all[i].removeAttribute('onvolumechange');
all[i].removeAttribute('onwaiting');
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment