有没有一个JavaScriptHTML模板既支持null合并(“未定义”安全),又能防止XSS

Is there a JavaScript HTML template that supports both null-coalescing ("undefined" safe) and protects from XSS?

本文关键字:未定义 安全 XSS JavaScriptHTML 有一个 合并 null 支持      更新时间:2023-09-26

我正在寻找一个JavaScript模板引擎,并选择了DoT.js(主要是因为它非常快),但遇到了以下问题

  • 空安全/未定义的安全/空合并,就像在Freemark/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保护,由于DoT.js不使用DOM,即使使用{{!}}运算符也很快,我对世界上所有的XSS都将由查找和替换(例如,如果作者遗漏了什么)处理感到不舒服

    文档虽然它很快,但还没有那么受欢迎,但来源很小,你只需阅读它们就可以了解大多数内容,但拥有一个好的社区是的一大好处

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

https://github.com/mikesamuel/jquery-jquery-tmpl-proposal可以很好地与其他模板系统进行基准测试,并具有上下文自动转义功能以防止XSS。

您可以从一致性套件中看到,它合并了undefined

splash.js-带有JavaScript的无逻辑{{splash}}模板。

1)如果键存在,并且其值为null、undefined或false,或者是空列表,则不会渲染块。

2)默认情况下,所有变量都是HTML转义的。如果您想呈现无标题的HTML,请使用三个小胡子:{{name}}。您也可以使用&取消捕捉变量。

参考:https://github.com/janl/mustache.js