我需要从字符串中删除html标记。我不喜欢使用正则表达式,因为总会有人找到一种方法来打破它。然而,使用dom会带来明显的风险。
如何使用createDocumentFragment
?
function striptags(content) {
var frag = document.createDocumentFragment();
var innerEl = document.createElement('div');
frag.appendChild(innerEl);
innerEl.innerHTML = content;
return frag.firstChild.innerText;
}
striptags('<script>alert("xss attack!")</script>');
答案 0 :(得分:-1)
这是使用js剥离html标签的安全方法吗?
不,使用文档片段对任何事情都没有帮助。在innerHTML
will not evaluate <script>
s期间,您的方法仍然容易受到其他XSS实践的影响(例如striptags('<img src="" onerror="alert(\'xss attack!\')"></img>')
)。
只需删除或替换您想要使用正则表达式删除的内容,然后escape其余内容(无论如何都要执行此操作)。
function striptags(content) {
return escapeHtml(content.replace(/<\/p>/g, "\n\n")
.replace(/<br[^>]*>/g, "\n")
.replace(/<[^>]*>/g, ""));
}