javascript - 在客户端清理/重写 HTML

标签 javascript html security html-sanitizing

我需要显示通过跨域请求加载的外部资源,并确保只显示“安全”内容。

可以使用 Prototype 的 String#stripScripts删除脚本 block 。但是 onclickonerror 等处理程序仍然存在。

有没有图书馆至少可以

  • 剥离脚本 block ,
  • 杀死 DOM 处理程序,
  • 删除黑名单标签(例如:embedobject)。

那么那里有任何与 JavaScript 相关的链接和示例吗?

最佳答案

2016 年更新:现在有一个 Google Closure基于 Caja sanitizer 的包装。

它有一个更简洁的 API,被重写以考虑现代浏览器上可用的 API,并与 Closure Compiler 更好地交互。


无耻外挂:见caja/plugin/html-sanitizer.js对于经过全面审查的客户端 html sanitizer 程序。

它是白名单,不是黑名单,但是白名单是可以根据CajaWhitelists配置的


如果要删除所有标签,请执行以下操作:

var tagBody = '(?:[^"\'>]|"[^"]*"|\'[^\']*\')*';

var tagOrComment = new RegExp(
    '<(?:'
    // Comment body.
    + '!--(?:(?:-*[^->])*--+|-?)'
    // Special "raw text" elements whose content should be elided.
    + '|script\\b' + tagBody + '>[\\s\\S]*?</script\\s*'
    + '|style\\b' + tagBody + '>[\\s\\S]*?</style\\s*'
    // Regular name
    + '|/?[a-z]'
    + tagBody
    + ')>',
    'gi');
function removeTags(html) {
  var oldHtml;
  do {
    oldHtml = html;
    html = html.replace(tagOrComment, '');
  } while (html !== oldHtml);
  return html.replace(/</g, '&lt;');
}

人们会告诉你,你可以创建一个元素,并分配 innerHTML然后得到 innerTexttextContent ,然后转义其中的实体。不要那样做。自 <img src=bogus onerror=alert(1337)> 以来,它容易受到 XSS 注入(inject)攻击将运行 onerror处理程序,即使节点从未附加到 DOM。

关于javascript - 在客户端清理/重写 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/295566/

相关文章:

php - 带有 PHP 文件的 JQuery AJAX 缓存

javascript - css3 动画只发生一次

sql - 在 Oracle (PL/SQL) 中执行动态 SQL 并确保安全性

html - 你能帮我在搜索栏中使用 "icon font"仅使用 CSS 来打开搜索栏吗?

ios - 未调用 AVAssetResourceLoaderDelegate 方法

java - 如何保护我的 Java Web 应用程序?

javascript - Jquery 添加/删除类不起作用

javascript - 所有 Promise 完成后退出 Node

html - 调整 SVG foreignObject 元素的大小以适合 HTML 元素

html - Internet Explorer 媒体查询在不应生效时生效