function encodeHTML(dirtyString) {
var container = document.createElement('div');
var text = document.createTextNode(dirtyString);
container.appendChild(text);
return container.innerHTML; // innerHTML will be a xss safe string
}
document.write( encodeHTML('<p>some <span>content</span></p>') );
document.write( encodeHTML('<script><p>some <span>content</span></p>') );
这里需要记住的是,当我们访问 html 字符串(innerHTML,outerHTML)时,浏览器会转义 TextNodes 的特殊字符。相比之下,访问文本值(innerText、 textContent)将产生原始字符串,这意味着它们是不安全的,并且可能包含 XSS。
如果您使用 JQuery,那么使用 .text()是安全和向后兼容的。
如果你使用浏览器的话,纯 JavaScript 的 Internet Explorer 8是:
string.replace(/(<([^>]+)>)/ig,"");
但是使用正则表达式解析 HTML 存在一些问题,因此这不会提供很好的安全性。此外,这只处理 HTML 字符,因此它不是完全 xss 安全的。