Существует ли JavaScript-шаблон HTML, который поддерживает объединение нулей («неопределенный» безопасный) и защищает от XSS? - PullRequest
3 голосов
/ 01 апреля 2012

Я искал шаблонизатор JavaScript и выбрал DoT.js (в основном потому, что он очень быстрый ), но имел следующие проблемы

  • Null safe / Undefined safe / null-coalescing , так же, как в 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 , и так же быстро, как DoT.js не использует DOM, даже с {{!}} оператор, я не чувствую себя комфортно, что все XSS в мире будут обработаны путем поиска и замены (например, что, если автор что-то пропустил)

    Документация хотя это очень быстро,это не так популярно (пока), но источники настолько малы, что большинство вещей можно выяснить, просто прочитав их, но хорошее сообщество - это большое преимущество

Какая библиотека шаблонов JavaScriptотвечает этим двум требованиям, и все еще считается быстрым?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2012

https://github.com/mikesamuel/jquery-jquery-tmpl-proposal тесты хорошо сопоставимы с другими системами шаблонов и имеют контекстное автоэкранирование для предотвращения XSS.

Из набора соответствия видно, что он объединяется undefined.

1 голос
/ 01 апреля 2012

mustache.js - шаблоны {{mustache}} без логики с JavaScript.

1) Если ключ существует и имеет значение null, undefined или false или является пустым списком, блок не будет отображаться.

2) Все переменные по умолчанию экранированы HTML. Если вы хотите отобразить неэкранированный HTML, используйте тройные усы: {{{name}}}. Вы также можете использовать &, чтобы удалить переменную.

Ссылка: https://github.com/janl/mustache.js

...