使用 javascript innerHTML 为注入消毒 html?
Sanitize html for injection using javascript innerHTML?
需要修复下面的函数以在 listStr
中清理 html,尝试了各种 HTML 转义函数 (listDom.innerHTML = escapeHTML(listStr);
) 但我得到的是原始文本作为输出元素!!
function createList(list) {
let listStr = "";
list.forEach(function (item) {
if (item.click) {
var clean_url = encodeURIComponent(item.href);
clean_url = "";
//console.log(clean_url);
listStr += `<div class='list_item' id="${item.uid}"><a href="javascript:void(0);">${item.label}</a></div>`;
} else {
//'loop', i + ''
listStr += `<div class='list_item' id="${item.uid}" loop="${item.loop}"><a href="${item.href}">${item.label}</a></div>`;
}
});
listStr += '';
let listDom = document.createElement("div");
listDom.setAttribute("id", "list");
listDom.setAttribute("style", "display: none;");
listDom.innerHTML = listStr;
return listDom;
}
我最后是这样的:
let listItem = document.createElement('div');
listItem.setAttribute('class', 'list_item');
listItem.setAttribute('id', item.uid);
let linkItem = document.createElement('a');
linkItem.setAttribute('href', 'javascript:void(0);');
linkItem.innerText = item.label;
listItem.appendChild(linkItem);
listStr.appendChild(listItem);
需要修复下面的函数以在 listStr
中清理 html,尝试了各种 HTML 转义函数 (listDom.innerHTML = escapeHTML(listStr);
) 但我得到的是原始文本作为输出元素!!
function createList(list) {
let listStr = "";
list.forEach(function (item) {
if (item.click) {
var clean_url = encodeURIComponent(item.href);
clean_url = "";
//console.log(clean_url);
listStr += `<div class='list_item' id="${item.uid}"><a href="javascript:void(0);">${item.label}</a></div>`;
} else {
//'loop', i + ''
listStr += `<div class='list_item' id="${item.uid}" loop="${item.loop}"><a href="${item.href}">${item.label}</a></div>`;
}
});
listStr += '';
let listDom = document.createElement("div");
listDom.setAttribute("id", "list");
listDom.setAttribute("style", "display: none;");
listDom.innerHTML = listStr;
return listDom;
}
我最后是这样的:
let listItem = document.createElement('div');
listItem.setAttribute('class', 'list_item');
listItem.setAttribute('id', item.uid);
let linkItem = document.createElement('a');
linkItem.setAttribute('href', 'javascript:void(0);');
linkItem.innerText = item.label;
listItem.appendChild(linkItem);
listStr.appendChild(listItem);