在追加到DOM时,是否可以将变量与字符串连接起来?是否需要逃避?

时间:2013-12-04 12:47:47

标签: javascript jquery escaping

我和我的同事正在进行这场辩论,他说在jQuery append()中连接字符串和变量并使用它们不会对XSS产生任何风险。但是,我认为包含不受信任数据的变量必须在将其附加到DOM之前进行转义。默认的jQuery函数,例如textattrhtml等,可以很好地进行转义。

同事的代码版本:

$('#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。我的假设是正确的还是我的同事是正确的。或者我们都做错了吗?

1 个答案:

答案 0 :(得分:1)

jQuery .text()转义内容

jQuery .html()没有逃避内容

jQuery .append()并且它的亲戚不会逃避内容