0

我在 node.js 下使用 npm 包Caja-HTML-Sanitizer 。

我可以使用 sanitizer() 函数清理 html 输入,但是如何使用白名单只允许某些标签(例如 p br strong)?

谢谢!

4

1 回答 1

8

那个包看起来不是最新的——实际的 sanitizer 文件至少有三年的历史(根据 git 时间戳)。我不建议使用该版本。

不幸的是,目前没有任何参数可用于简单地提供备用白名单的 sanitizer。(有一些原因可能会在未来发生变化,但这还没有发生。)

  • 修改内置白名单最直接的方法是获取一个Caja源码树,修改src/com/google/caja/lang/html/*-whitelist.json并重建( $ ant);与您找到的相同形式的消毒剂是内置的ant-lib/com/google/caja/plugin/html-sanitizer-bundle.js

  • 您还可以直接使用标签策略自定义行为。而不是调用sanitize(html),使用sanitizeWithPolicy

    var basicPolicy = html.makeTagPolicy();
    function customPolicy(tagName, attribs) {
        if (/* whatever additional condition you want */) {
            return basicPolicy(tagName, attribs);
        }
    }
    
    ...
    
    return html.sanitizeWithPolicy(input, customPolicy);
    

    但是,这需要您对所需的限制进行编程,而不是对现有数据使用现有的白名单逻辑。它对将来可能对 sanitizer API 进行的更改也更加敏感。

于 2013-08-05T17:53:22.330 回答