2015-09-17 2 views
0

Я просто нашел странный случай, который привел к XSS, но я действительно не понимаю, почему. Код в вопросе искал тег с соответствующим именем, как это:jQuery Возврат к созданию объекта DOM, если поиск пуст?

var varName = getCookie('cookiename'); 
var link = $('.someclass a[name=' + varName + ']'); 

Если печенье происходит содержать XSS, выполнение, что приводит JQuery код в XSS выполняется. Я понимаю, что само по себе в DOM будет добавлено что-то вроде $ ('< img src = x onerror = alert (1) />') на основе того, что я прочитал в документации. Я не понимаю, почему код выше, с тем же самым тегом img, что и значение переменной, имеет тот же результат. Разве это не приведет к пустой переменной?

+0

Какую версию JQuery? В предыдущих версиях приведенный выше код создавал элемент вместо того, чтобы возвращать пустой массив с недопустимым вводом. В более поздних версиях вместо этого возникает ошибка в этом случае. На самом деле это имеет место с версией jQuery stackoverflow, используемой в настоящее время. –

ответ

0

В старых версиях JQuery, следующий селектор JQuery приведет к DIV создается:

$('.someclass a[name=' + '<div>Hello World!</div>' + ']') 

однако, в более поздних версиях JQuery, JQuery не будет создавать фрагмент DOM, если только HTML строка начинается с <, который полностью избегает этой проблемы.

Итак, либо выполните проверку ввода перед тем, как поместить его в селектор, либо обновите jQuery.

http://jsfiddle.net/g33n57vs/

Смежные вопросы