如果搜索是空的,jQuery后备创建DOM对象?

时间:2015-09-17 20:26:14

标签: javascript jquery html

我刚发现了一个导致XSS的奇怪案例,但我真的不明白为什么。有问题的代码是搜索具有匹配名称的标记,如下所示:

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

如果该cookie恰好包含XSS,则执行该jQuery代码会导致XSS被执行。据我所知,根据我在文档中读到的内容,将自行添加类似$('< img src = x onerror = alert(1)/>')的内容并执行。我不明白为什么上面的代码与变量值具有相同的img标记,具有相同的结果。它不应该只是一个空变量吗?

1 个答案:

答案 0 :(得分:0)

在旧版本的jQuery中,以下jquery选择器将导致创建div:

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

然而,在更新版本的jQuery中,jQuery不会创建dom片段,除非html字符串以<开头,这完全避免了这个问题。

因此,要么在将输入放入选择器之前验证输入,要么更新jQuery。

http://jsfiddle.net/g33n57vs/