You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Google Caja sanitizer仅清理Node.js输入的JS代码并保留HTML字符?

嘿,针对你的问题,我来分享几个可行的方案~

解决方案:保留HTML标签仅清理JS相关内容

关于Google-Caja Sanitizer的适配

Google-Caja的默认行为确实会转义<和>这类HTML字符,因为它的核心设计是做严格的HTML sanitization。不过你可以通过自定义白名单规则来调整它的行为,实现保留合法HTML标签、仅过滤<script>/<style>和JavaScript函数的需求:

  • 首先,明确指定允许的HTML标签(直接排除script、style)
  • 严格禁止所有JavaScript相关的属性(比如onclick、onload这类on*事件属性)
  • 注意:修改Caja的默认规则有一定复杂度,需要仔细配置避免安全漏洞,一旦规则疏漏可能让恶意代码有机可乘。

简单的Node.js使用示例(基于caja-sanitizer包):

const sanitize = require('caja-sanitizer').sanitize;

// 自定义允许的标签和属性,完全排除JS相关内容
const customConfig = {
  allowedTags: ['p', 'div', 'span', 'a', 'img', 'b', 'i', 'ul', 'li'], // 根据你的业务需求添加标签
  allowedAttributes: {
    'a': ['href'],
    'img': ['src', 'alt']
    // 绝对不要添加任何on*属性
  }
};

// 注意:部分Caja版本可能需要调整内部过滤逻辑,才能避免合法标签被转义
const cleanedContent = sanitize(userInput, customConfig);

更推荐的Node/Express替代工具

相比调整Google-Caja,下面这两个工具更灵活易用,完全能满足你的需求,而且社区活跃度高、安全性有保障:

1. DOMPurify

这是目前最受欢迎的HTML sanitizer之一,支持高度自定义,能精准保留合法HTML同时过滤恶意内容:

const createDOMPurify = require('dompurify');
const { JSDOM } = require('jsdom');

// Node环境需要依赖jsdom初始化DOMPurify
const window = new JSDOM('').window;
const DOMPurify = createDOMPurify(window);

// 配置:禁止script、style标签,以及所有JS事件属性
const cleanedInput = DOMPurify.sanitize(userInput, {
  FORBID_TAGS: ['script', 'style'],
  FORBID_ATTR: ['onclick', 'onload', 'onmouseover', 'onsubmit'] // 覆盖所有on*开头的属性
});

2. sanitize-html

这个库的API非常直观,配置起来快速上手,适合快速集成到Express项目中:

const sanitizeHtml = require('sanitize-html');

const cleanedInput = sanitizeHtml(userInput, {
  // 指定允许的标签(自动排除script、style)
  allowedTags: ['p', 'div', 'span', 'a', 'img', 'b', 'i', 'ul', 'li'],
  // 指定允许的属性,排除所有JS相关属性
  allowedAttributes: {
    'a': ['href'],
    'img': ['src', 'alt']
  },
  // 禁止所有on*开头的事件属性
  forbiddenAttributes: ['on*']
});

总结

如果一定要用Google-Caja,需要深入定制它的过滤规则,但过程相对繁琐;更推荐使用DOMPurify或sanitize-html,它们能更轻松地实现“保留正常HTML、仅清理JS相关内容”的需求,同时安全性更有保障。

内容的提问来源于stack exchange,提问作者Saravanan K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:35:58