Безопасно ли повторно выполнять вставленный узел <script>? - PullRequest
1 голос
/ 20 ноября 2019

Это дополнительное от комментариев здесь.

Я использую SquareSpace для создания своего сайта, а для некоторых вещей мне нравится использовать их блоки HTML-кода непосредственно внутристраницы, и включить некоторый JavaScript в этом (в <script></script>) блоке. Проблема в том, что AJAX-загрузка SquareSpace вставляет этот узел скрипта как innerHTML в код div, поэтому скрипт не выполняется.

Итак, я добавил некоторый код для всего сайта, который обнаруживает вновь вставленные блоки кода SquareSpace, ищет в них узел <script>, а затем повторно вставляет узел сценария ( с использованием этого кода) чтобы выполнить его. Вот как выглядит мой JavaScript с кодом JQuery:

$(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> в первую очередь, тогда все равно ставки отключены?

...