如何在将数据加载到div时阻止XSS?

时间:2016-06-09 07:45:09

标签: javascript jquery xss

我使用Ajax(JSON)解析数据,然后将其转换为如下模板:

function noteTemplate(obj) {
    var date = obj.created_at.split(/[- :]/),
        dateTime = date[2] + '.' + date[1] + '.' + date[0];
        dateTime += ' @ ' + date[3] + ':' + date[4] + ':' + date[5];

    var note = '<div class="note-container" target="' + obj.id + '">';
        note += '<div class="note-options"><div class="note-remove"></div></div>';
        note += '<div class="note-name">' + obj.name + '</div>';
        note += '<div class="note-date">' + dateTime + '</div>';
        note += '<div class="note-content">' + obj.content + '</div>';
        note += '</div>';
    return note;
}

然后使用jQuery将其附加到div。现在,如果obj.nameobj.content包含任何JS,那么将执行这些JS。

最合适的方法是什么?感谢

更新:

我找到了一个解决方案并以本机方式逃避&lt; &GT;并用这样的实体替换它们就可以了。

obj.content.replace(/</g, "&lt;").replace(/>/g, "&gt;")

jQuery的:

var $note = $(note);
$note.find('.note-name').text(obj.name);
$note.find('.note-content').text(obj.content);

return $note;

.text()为您清理它。

感谢@Rory McCrossan的想法!

1 个答案:

答案 0 :(得分:3)

问题在于你如何追加函数返回给DOM的HTML,而不是如何生成HTML本身。

如果使用jQuery的text()方法附加元素的内容,它将为您清理,如下所示:

$('#myElement').text(noteTemplate(data));