Mustache.js: Unescape todos os valores

Criado em 14 ago. 2012  ·  14Comentários  ·  Fonte: janl/mustache.js

seria possível adicionar uma opção para não fazer nenhum escape de html?

Comentários muito úteis

Não testei, mas de acordo com a página do manual:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Se isso não funcionar, você pode usar uma função que simplesmente retorna sua entrada sem escape.

Todos 14 comentários

Não testei, mas de acordo com a página do manual:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Se isso não funcionar, você pode usar uma função que simplesmente retorna sua entrada sem escape.

Sim, esse é o comportamento atual, mas meu caso de uso para isso tem uma entrada extremamente confiável e muitos caracteres especiais.

Eu estava me referindo a esta parte:
If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Portanto, se você não quiser que suas variáveis ​​tenham escape, você deve usar o bigode triplo em vez do duplo.
Edit: Eu testei e isso está implementado corretamente nesta implementação.

Sim, estava me perguntando se poderia haver um atalho útil para alterar o comportamento padrão.

Algumas implementações suportaram um pragma de escape invertido no passado (mustache.php v1.x, ruby ​​v0.8ish). Isso essencialmente trocou o significado de {{ foo }} e {{{ foo }}} . É útil para uso não-html, como arquivos ini, uma vez que escapar entidades html não faz sentido nesse caso e poupa muitos bigodes extras.

No entanto, Mustache.php v2.x não suporta esse pragma. Em vez disso, optamos por uma opção de 'escape' personalizada, permitindo que os usuários passem um retorno de chamada de escape alternativo. Passar function($text) { return $text; } transforma o escape em um autônomo.

Hmm, isso se encaixaria exatamente no meu caso de uso. É possível fazer isso em mustache.js e, em caso afirmativo, para onde você passaria essa função?

Certo, não há problema em seguir as diretrizes do OWASP, mas escapar sempre não é útil em alguns casos. Existe algum HEC para que este problema seja resolvido?

Não seria mais fácil simplesmente trocar {{{ e {{ no analisador de sua instalação?

No momento, acabei de executar:

template.replace(/\{\{([^\}]*)\}\}/g, '{{{$1}}}');

em todos os meus modelos antes de executá-lo, o que funciona. Seria bom ter um sistema mais integrado. Eu gosto bastante da sugestão de @bobthecow , pois permitiria que você escapasse de outras coisas se você precisasse. por exemplo, se você tiver um formato semelhante a JSON em vez de XML, você pode querer escapar aspas / vírgulas / dois pontos etc.

@janl e se eu quiser renderizar o mesmo modelo em dois cenários: primeiro com escape, segundo sem escape?

@bobthecow Poderíamos facilmente adotar a mesma abordagem em mustache.js e apenas usar a versão exportada de Mustache.escapeHtml para todos os escapes. Isso permitiria aos usuários fazer algo como:

Mustache.escapeHtml = function (text) { return text; }

Isso seria útil? Obviamente, você precisaria ter o cuidado de redefinir o valor da função se quiser que o escape funcione corretamente nas invocações subsequentes e não seria capaz de decidir escapar com o stache triplo.

: +1: Eu gosto disso. Pelo que eu posso dizer, o principal caso de uso é desativar totalmente o escape, porque é um documento não HTML. Não vejo muita utilidade em trocar escape / noescape (é por isso que nem implementei no Mustache.php v2).

Sim, isso definitivamente atenderia ao meu caso de uso, e posso imaginar que outras pessoas o usem para dizer:

Mustache.escapeHtml = function (text) { return text.replace(/\"/g, '\\"'; }

para escapar de strings. Ou podem implementar funções de lista branca. Resumindo, resolveria todos os casos de uso em que consigo pensar.

Não testei, mas de acordo com a página do manual:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Se isso não funcionar, você pode usar uma função que simplesmente retorna sua entrada sem escape.

Muito obrigado !! Isso funciona.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

mbrodala picture mbrodala  ·  16Comentários

zekth picture zekth  ·  18Comentários

rlightner picture rlightner  ·  7Comentários

kuldeepdhaka picture kuldeepdhaka  ·  9Comentários

barbalex picture barbalex  ·  5Comentários