是否有一个JavaScript HTML模板既支持空合并(“未定义”安全),又能防止XSS攻击?

是否有一个JavaScript HTML模板既支持空合并(“未定义”安全),又能防止XSS攻击?,javascript,template-engine,dot.js,Javascript,Template Engine,Dot.js,我正在寻找一个JavaScript模板引擎,并选择了它(主要是因为它非常简单),但有以下问题 空安全/未定义安全/空合并,就像在Freemarker/VTL中一样,我希望能够通过foo.bar.foobar,而不必担心检查foo、foo.bar和foo.bar.foobar是否已定义例如,避免类似的事情 {{ var val='';try{ var=foo.bar.foobar }catch(){} }}{{= val}} 我对此感到很难过,或者 {{= typeof foo !== 'un

我正在寻找一个JavaScript模板引擎,并选择了它(主要是因为它非常简单),但有以下问题

  • 空安全/未定义安全/空合并,就像在Freemarker/VTL中一样,我希望能够通过foo.bar.foobar,而不必担心检查foo、foo.bar和foo.bar.foobar是否已定义
    例如,避免类似的事情

    {{ var val='';try{ var=foo.bar.foobar }catch(){} }}{{= val}}
    
    我对此感到很难过,或者

    {{= typeof foo !== 'undefined'?typeof foo.bar!=='undefined'?typeof foo.bar.foobar!=='undefined'?foo.bar.foobar:'foo.bar.foobar is undefined':'foo.bar is undefined':'foo is undefined'}}
    
    我不确定我是感觉好还是坏

  • 我希望有好的XSS保护,而fast DoT.js不使用DOM,即使使用{{!}操作符,我也不愿意世界上所有的XSS都由find and replace来处理(例如,如果作者遗漏了什么怎么办)

    文档虽然速度很快,但还没有那么受欢迎,但是来源非常小,你可以通过阅读了解大部分内容,但是拥有一个好的社区是一个很大的好处

哪个JavaScript模板库满足这两个要求,并且仍然被认为是快速的

与其他模板系统相比效果良好,必须防止XSS


从中可以看出,它将
未定义的

mustache.js-Logic-less{{mustache}}模板与JavaScript结合在一起

(一) 如果键存在且值为null、undefined或false,或者是空列表,则不会呈现块

(二) 默认情况下,所有变量都是HTML转义的。如果您想要呈现未缩放的HTML,请使用三重胡须:{{{name}}。您还可以使用&来取消对变量的scape

参考资料:

Re 2),HTML转义是不错的第一步,但不能阻止XSS。例如,默认情况下,将
javascript:doEvil()
注入链接的
href