2012-03-31 15 views
3

我一直在尋找一個JavaScript模板引擎,並選擇DoT.js(主要是因爲它是非常fast),但有以下問題是否有JavaScript HTML模板支持null-coalescing(「undefined」safe)並保護XSS?

  • 空安全/未定義安全/空凝聚,就像在Freemarker的/ VTL,我希望能夠通過foo.bar.foobar,而不用擔心檢查foo,foo.bar和foo.bar.foobar,它們被定義爲
    eg避免像

    {{ 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模板庫回答這兩個要求,並且仍然被認爲是快?

回答

1

mustache.js - 帶JavaScript的無邏輯{{mustache}}模板。

1) 如果鍵值存在且其值爲null,undefined或false,或者是空列表,則該塊將不會呈現。

2) 默認情況下,所有變量都是HTML轉義的。如果您想呈現未轉義的HTML,請使用三重鬍鬚:{{{name}}}。您還可以使用&來隱藏變量。

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

+1

RE 2),HTML轉義體面第一步,但並不妨礙對XSS。例如,注入'javascript:doEvil()'到鏈接的'href'中將不會被默認設置阻止。 – 2012-03-31 22:31:11