在创建HTML元素时清理用户输入

时间:2015-08-02 08:29:16

标签: javascript jquery html5 xss

我正在尝试使用纯HTML5和Javascript创建一个待办事项应用程序,我遇到了清理输入的问题。

例如:如果用户输入<script>alert("XSS")</script>,则会在页面上执行代码。

添加元素的代码是:

if ($('#TextArea').val() !== "") {
  var taskID = new Date().getTime();
  var taskMessage = $('#textArea').val();
  localStorage.setItem(taskID, taskMessage);
}

而显示元素的代码是:

var i = 0;
for (i = localStorage.length; i != 0; i--) {
  var taskID = localStorage.key(i - 1);
  $('#task').append("<li id='" + taskID + "'>" + localStorage.getItem(taskID) + "</li>");
}

有没有办法只使用HTML5和Javascript属性来清理数据?

1 个答案:

答案 0 :(得分:6)

与任何和所有XSS预防一样:当这些字符串包含用户提供的值时,不要从字符串构建HTML,尤其不是

jQuery有a convenient facility to build elements safely - 你可以使用属性传递一个对象:

$("<li>", {
  id: taskID,
  text: localStorage.getItem(taskID)
}).appendTo('#task');

事实上,我建议你绝对不要使用字符串连接来构建HTML。对于比上述情况更复杂的情况,请使用经过充分测试的HTML模板库,例如MustacheHandlebars