我和我的同事正在进行这场辩论,他说在jQuery append()
中连接字符串和变量并使用它们不会对XSS产生任何风险。但是,我认为包含不受信任数据的变量必须在将其附加到DOM之前进行转义。默认的jQuery函数,例如text
,attr
,html
等,可以很好地进行转义。
同事的代码版本:
$('#container').append('<div data-someData="' + untrustedData + '">' + untrustedTEXT + '<img src="' + untrustedIMGSRC + '" /></div>');
我的版本:
/* First append the HTML structure */
$('#container').append('<div><img /></div>');
/* Now assign variables using jQuery functions such as `attr`, `data`, etc */
$('#container div').data('someData', untrustedData);
$('#container div').text(untrustedTEXT);
$('#container div img').attr('src', untrustedIMGSRC);
我的代码版本增加了代码占用空间,但IMO处理必要的转义以防止XSS。我的假设是正确的还是我的同事是正确的。或者我们都做错了吗?
答案 0 :(得分:1)
jQuery .text()
转义内容
jQuery .html()
没有逃避内容
jQuery .append()
并且它的亲戚不会逃避内容