重新执行插入的<script>节点是否安全?

时间:2019-11-20 17:25:29

标签: javascript jquery security xss squarespace

这是从the comments here.衍生出来的

我正在使用SquareSpace来构建我的网站,对于某些事情,我希望直接在页面内使用其HTML代码块,并在其中(在<script></script>块中包含一些JavaScript)。问题在于,SquareSpace的AJAX加载会将该脚本节点作为innerHTML插入到代码div中,因此该脚本不会得到执行。

因此,我添加了一些站点范围的代码,这些代码可检测新插入的SquareSpace代码块,在其中查找一个<script>节点,然后重新插入脚本节点(using this code)来执行它。这就是我的带有JQuery代码的JavaScript的样子:

$(document).bind("DOMNodeInserted",function(e){
  var script_nodes = $(e.target).find(".sqs-block-code").find("script");
  script_nodes.each(function() {
    var s = document.createElement('script');
    s.type = 'text/javascript';
    var code = this.textContent;
    try {
      s.appendChild(document.createTextNode(code));
      $(this).after($(s));
    } catch (e) {
      s.text = code;
      $(this).after($(s));
    }
    $(this).remove();
  });
});

我的问题是,这是否会增加安全风险(尤其是XSS)。我认为它可能没有额外的风险,因为如果攻击者可以首先插入一个<script>节点,那么赌注还是没有了吗?

0 个答案:

没有答案