javascript - 有没有什么技术可以在 HTML5 中使用 W^X 机制来对抗 XSS?

标签 javascript html xss

我想知道是否可以告诉浏览器在页面初始加载时只执行标签中的 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/

相关文章:

javascript - 如何通过索引获取 jQuery UI Tabs DOM 元素?

javascript - 仅拖/放更改元素检查一次

php - html 清理造成困难

javascript - 火狐3 : Enable AJAX to localhost from outside domain

javascript - 悬停在 jquery 中无法正常工作

javascript - 如何让我的正则表达式只返回完全匹配

javascript - Mongoose QueryStream 和请求模块

html - CSS 自动调整网格元素大小

javascript, html5 : e. dataTransfer.items 与 e.dataTransfer.files,如何使用前者获取文件大小?

Java 5 HTML 转义以防止 XSS