如何在node.js下使用Google的Caja HTML Sanitizer将代码列入白名单?

Srg*_*man 0 javascript xss node.js google-caja

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

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

谢谢!

Kev*_*eid 8

该软件包看起来不像是最新的 - 实际的清理程序文件至少有三年的历史(根据git时间戳).我不建议使用该版本.

不幸的是,目前没有清洁剂的参数,它只是提供备用白名单.(这有可能在未来发生变化,但尚未发生.)

  • 修改内置白名单最直接的方法是获取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);
    
    Run Code Online (Sandbox Code Playgroud)

    但是,这需要您编写所需的限制,而不是将现有的白名单逻辑与现有数据一起使用.它对将来对消毒剂API的可能更改也更敏感.