Mustache.js: すべての値をエスケープ解除します

作成日 2012年08月14日  ·  14コメント  ·  ソース: janl/mustache.js

HTMLのエスケープをまったく行わないオプションを追加することは可能でしょうか?

最も参考になるコメント

私はそれをテストしていませんが、manページによると:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
それが機能しない場合は、エスケープせずに入力を返すだけの関数を使用できます。

全てのコメント14件

私はそれをテストしていませんが、manページによると:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
それが機能しない場合は、エスケープせずに入力を返すだけの関数を使用できます。

ええ、それは現在の動作ですが、これの私のユースケースは非常に信頼できる入力と多くの特殊文字を持っています。

私はこの部分を参照していました:
If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
したがって、変数をエスケープしたくない場合は、doubleの代わりにtriplemustacheを使用する必要があります。
編集:私はそれをテストしました、そしてこれはこの実装で正しく実装されています。

ええ、デフォルトの動作を変更するための便利なショートカットがあるのではないかと考えていました。

一部の実装では、過去に逆エスケーププラグマがサポートされていました(mustache.php v1.x、ruby v0.8ish)。 これにより、基本的に{{ foo }}{{{ foo }}}の意味が入れ替わりました。 この場合、htmlエンティティをエスケープしても意味がなく、余分な口ひげをたくさん節約できるため、iniファイルのようにhtml以外で使用する場合に便利です。

ただし、Mustache.phpv2.xはこのプラグマをサポートしていません。 代わりに、カスタムの「escape」オプションを選択して、ユーザーが代替のエスケープコールバックを渡すことができるようにしました。 function($text) { return $text; }渡すと、エスケープがノーオペレーションに変わります。

うーん、それは私のユースケースにぴったり合うでしょう。 mustache.jsでそれを行うことは可能ですか?もしそうなら、その関数をどこに渡しますか?

そうです、OWASPガイドラインに固執することは問題ありませんが、常にエスケープすることが役に立たない場合があります。 この問題を完了するためのETAはありますか?

インストールのパーサーで{{{{{を交換する方が簡単ではないでしょうか。

現時点では、私はただ走っています:

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

実行する前にすべてのテンプレートで実行します。これは機能します。 より多くのシステムが組み込まれていると便利です。 @bobthecowの提案は、必要に応じて他のものから逃れることができるので、とても気に入っています。 たとえば、XMLではなくJSONのような形式を使用している場合は、引用符/カンマ/コロンなどをエスケープする必要があります。

@janl 2つのシナリオで同じテンプレートをレンダリングしたい場合はどうなりますか:最初にエスケープされ、2番目にエスケープされませんか?

@bobthecow mustache.jsでも同じアプローチを簡単に採用でき、すべてのエスケープにエクスポートされたバージョンのMustache.escapeHtmlを使用できます。 これにより、ユーザーは次のようなことができるようになります。

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

それは役に立ちますか? もちろん、エスケープを後続の呼び出しで適切に機能させたい場合は、関数の値をリセットするように注意する必要があり、トリプルスタックでエスケープすることを決定することはできません。

:+1:掘ります。 私の知る限り、これはHTML以外のドキュメントであるため、主な使用例はエスケープを完全に無効にすることです。 エスケープ/ noescapeを交換することはあまり使用されていません(そのため、Mustache.php v2に実装していませんでした)。

ええ、それは間違いなく私のユースケースを満たします、そして私はそれを次のように使用している他の人々を想像することができます:

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

文字列をエスケープします。 または、ホワイトリスト機能を実装する場合もあります。 要するに、それは私が考えることができるすべてのユースケースを修正するでしょう。

私はそれをテストしていませんが、manページによると:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
それが機能しない場合は、エスケープせずに入力を返すだけの関数を使用できます。

トンありがとう! これは機能します。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

zekth picture zekth  ·  18コメント

SmasherHell picture SmasherHell  ·  18コメント

rlightner picture rlightner  ·  7コメント

connor11528 picture connor11528  ·  3コメント

MatthijsZw picture MatthijsZw  ·  18コメント