#javascript #jquery #security
#javascript #jquery #Безопасность
Вопрос:
Похоже, что jQuery не документирует, как он ведет себя при использовании $.html() или $.load() для вставки фрагмента HTML-документа в текущий DOM:
Что это делает с < script >
тегами?
Тем не менее, они выполняются. Но нигде не найдены в DOM. Кажется, jQuery на мгновение вставляет блоки скрипта в DOM или оценивает его.
Документации на этот счет нет. Знаете ли вы какой-нибудь способ настроить его, т. Е. отключить? Это имеет последствия для безопасности по своей природе!
Комментарии:
1. Можете ли вы опубликовать, какой код вы используете?
Ответ №1:
<script>
Теги удаляются из кода и явно выполняются после обновления DOM.
Если вы используете «$.load()» с URL-адресом, в котором есть селектор (это взломанная функция API), вот так:
$.load("http://something #stuff", ... )
тогда он не будет запускать скрипты.
Комментарии:
1. Я вижу это поведение. Но есть ли какая-либо документация на этот счет? Существует ли «официальный» переключатель?
2. Насколько я знаю, ничего подобного, вот почему я зарегистрировал ошибку по этому поводу .
3. Следствием такого поведения является то, что если у вас есть
<script>
-ы, которые используютdocument.write
и вы вставляете такой HTML с помощью jQuery, он внезапно заменит всю страницу выводомdocument.write
-ов. Это потому, что скрипт выполняется, когда весь документ уже готов. Если вы вставляете страницы на другие страницы с помощью AJAX, это может вызвать некоторые неприятные сюрпризы … вещи, которые отлично работают при прямом посещении, уничтожат страницу при вставке с помощью AJAX.