我刚发现了一个导致XSS的奇怪案例,但我真的不明白为什么。有问题的代码是搜索具有匹配名称的标记,如下所示:
var varName = getCookie('cookiename');
var link = $('.someclass a[name=' + varName + ']');
如果该cookie恰好包含XSS,则执行该jQuery代码会导致XSS被执行。据我所知,根据我在文档中读到的内容,将自行添加类似$('< img src = x onerror = alert(1)/>')的内容并执行。我不明白为什么上面的代码与变量值具有相同的img标记,具有相同的结果。它不应该只是一个空变量吗?
答案 0 :(得分:0)
在旧版本的jQuery中,以下jquery选择器将导致创建div:
$('.someclass a[name=' + '<div>Hello World!</div>' + ']')
然而,在更新版本的jQuery中,jQuery不会创建dom片段,除非html字符串以<
开头,这完全避免了这个问题。
因此,要么在将输入放入选择器之前验证输入,要么更新jQuery。