这是使用js去除html标签的安全方法吗?

时间:2017-03-21 14:58:42

标签: javascript html

我需要从字符串中删除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>');

1 个答案:

答案 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, ""));
}