我想知道是否可以告诉浏览器在页面初始加载时只执行标签中的 JS 代码。因此不执行由 JS 代码动态插入的任何标签
element.innerHTML = "<script>XSSCode</script>"
我认为这可能会使许多 XSS 攻击变得不可能。
编辑:el.innerHTML
只是添加新脚本的一个例子
标记到网页。
最佳答案
您的问题中有两个不同的建议。
...if it is possible to tell the browser to only execute JS code that is in the tags in the initial loading of the page
然后您将阻止代码拆分并强制每个人捆绑完整的脚本。此外,还有 document.head.appendChild(...)
, child 在哪里 document.createElement("script")
- 这种功能会在 <head/>
中为“初始加载页面”创建一个脚本。 .从许多方面来说,阻止将脚本附加到文档的 DOM 都是一个坏主意。
tags that were inserted dynamically
...这是一个不同的提案。如果你说浏览器仍然允许 JS 创建 script
代码中的标签,但是 el.innerHTML
不应该允许 script
标签,这对于某些情况可能不会太限制。你可以实现它,例如通过覆盖 Element.prototype
的内部 HTML。这仍然是一个坏主意,但可能有助于防止某种攻击。
代码示例在此处接受的答案中: Change innerHTML set on the fly
本质上,你会这样做:
var originalSet = Object.getOwnPropertyDescriptor(Element.prototype, 'innerHTML').set;
Object.defineProperty(Element.prototype, 'innerHTML', {
set: function (value) {
// change it (ok)
var new_value = value.toString().replace(/<script/g,"");
//Call the original setter
return originalSet.call(this, new_value);
}
});
它不是很健壮,我不会在生产中使用它。但我可以想象它可能有助于检测第三方脚本的问题。
关于javascript - 有没有什么技术可以在 HTML5 中使用 W^X 机制来对抗 XSS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55501892/