JSFiddle - React, Tailwind, and code Playground
by zjcqoo
HTML
<div style="width:100%; height:100%; position:absolute" onmouseover="console.log('xss')"></div>
JavaScript
function hookEvent(onevent) {
function scanElement(element) {
// 跳过已扫描的事件
var flags = element['_flag'];
if (!flags) {
flags = element['_flag'] = {};
}
if (typeof flags[onevent] != 'undefined') {
return;
}
flags[onevent] = true;
if (element.nodeType != Node.ELEMENT_NODE) {
return;
}
var code = element.getAttribute(onevent);
if (code && /xss/.test(code)) {
element[onevent] = null;
console.log('拦截可疑代码:', code);
}
// 扫描上级元素
scanElement(element.parentNode);
}
document.addEventListener(onevent.substr(2), function(e) {
scanElement(e.target);
}, true);
}
for (var k in document) {
if (/^on/.test(k)) {
hookEvent(k);
}
}