【发布时间】:2013-08-04 17:45:23
【问题描述】:
我使用的是node.js下的npm包Caja-HTML-Sanitizer。
我可以使用 sanitizer() 函数清理 html 输入,但是如何使用白名单来只允许某些标签(例如 p br strong)?
谢谢!
【问题讨论】:
标签: javascript node.js xss google-caja
我使用的是node.js下的npm包Caja-HTML-Sanitizer。
我可以使用 sanitizer() 函数清理 html 输入,但是如何使用白名单来只允许某些标签(例如 p br strong)?
谢谢!
【问题讨论】:
标签: javascript node.js xss google-caja
那个包看起来不是最新的——实际的 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 未来可能发生的变化也更加敏感。
【讨论】: