Пожалуйста, внимательно прочитайте это утверждение: допустим, что до того, как будут добавлены какие-либо элементы в document
все небезопасные элементы в $dom, были удалены. Но они были изначально созданы. Ok let continue....
Если часть текста пользователя обрабатывается и может быть загружена так:
var comment = 'I\'m a naughty person!!' +
'<script src="http://blah.com/some_naughty_javascript.js">';
var $dom = $('<div>' + comment + '</div>');
Является ли это само по себе опасным каким-либо образом? Моя точка зрения, может просто простой акт создания DOM каким-то образом впрыскивать что-либо или просто обрабатывается и структура создается?
Например:
var $dom = $('<script>alert("hi");</script>');
Очевидно, что сообщение hi не появляется, пока оно не добавлено в document
. Но:
- Может ли любой тэг или что-нибудь, созданное таким образом, быть опасным?
- Могут ли какие-либо функции в javascript/jquery "наблюдать" за создаваемыми элементами таким образом и воздействовать на него, прежде чем он лишится плохих элементов и наденет документ?
Bounty Edit
Итак, как указано в ответах ниже, кажется, что этот метод не очень безопасен, особенно по одной причине:
-
var $dom = $('<img src="blah.jpg"/>')
- это будет запрашивать изображение сразу, независимо от того, был ли объект добавлен в документ.
Это создает серьезную проблему для обработки запросов HTML ajax. Например, если мы хотим получить значения из входов формы:
$.ajax({
url: 'test.php',
success: function(responseHTML) {
var inputs = $(responseHTML).find('form input');
}
});
Это невольно приведет к тому, что все изображения будут запрошены браузером.
Bounty присуждается всем:
- Кто может обеспечить хороший, безопасный способ обращения с ajax-запросами без указанной выше проблемы.
- В идеале не предоставляется ответ регулярного выражения... то есть, если мы хотим сделать
$(responseHTML).find('img')
- удаление тегов изображений с помощью регулярного выражения не может быть вариантом, поэтому для остановки src потребуется ненавязчивый способ загрузка, но все же имеют те же атрибуты, структуру и т.д.