Mustache.js: Lepaskan semua nilai

Dibuat pada 14 Agu 2012  ·  14Komentar  ·  Sumber: janl/mustache.js

apakah mungkin menambahkan opsi untuk tidak melakukan pelepasan html sama sekali?

Komentar yang paling membantu

Saya belum mengujinya, tetapi menurut halaman manual:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Jika itu tidak berhasil, Anda dapat menggunakan fungsi yang hanya mengembalikan inputnya tanpa lolos.

Semua 14 komentar

Saya belum mengujinya, tetapi menurut halaman manual:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Jika itu tidak berhasil, Anda dapat menggunakan fungsi yang hanya mengembalikan inputnya tanpa lolos.

Ya, itulah perilaku saat ini tetapi kasus penggunaan saya untuk ini memiliki input yang sangat tepercaya dan banyak karakter khusus.

Saya merujuk ke bagian ini:
If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Jadi jika Anda tidak ingin variabel Anda diloloskan, Anda harus menggunakan kumis rangkap tiga daripada kumis ganda.
Sunting: Saya telah mengujinya dan ini diterapkan dengan benar dalam implementasi ini.

Ya, bertanya-tanya apakah mungkin ada jalan pintas yang berguna untuk mengubah perilaku default.

Beberapa implementasi telah mendukung pragma pelarian terbalik di masa lalu (mustache.php v1.x, ruby ​​v0.8ish). Ini pada dasarnya menukar arti {{ foo }} dan {{{ foo }}} . Itu berguna untuk penggunaan non-html, seperti file ini, karena melarikan diri dari entitas html tidak masuk akal dalam kasus itu, dan itu menghemat banyak kumis ekstra.

Moustache.php v2.x tidak mendukung pragma ini. Kami memilih opsi 'escape' khusus, yang memungkinkan pengguna untuk melewati callback escape alternatif. Melewati function($text) { return $text; } mengubah melarikan diri menjadi larangan.

Hmm, itu akan cocok dengan kasus penggunaan saya. Apakah mungkin melakukannya di mustache.js, dan jika demikian, di mana Anda akan meneruskan fungsi itu?

Benar, tidak apa-apa untuk tetap berpegang pada pedoman OWASP tetapi melarikan diri setiap saat tidak berguna dalam beberapa kasus. Apakah ada ETA untuk menyelesaikan masalah ini?

Bukankah lebih mudah untuk menukar {{{ dan {{ di parser di instalasi Anda?

Saat ini saya hanya menjalankan:

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

pada semua templat saya sebelum menjalankannya, yang berfungsi. Akan lebih baik untuk memiliki lebih banyak sistem bawaan. Saya sangat menyukai saran @bobthecow karena itu akan memungkinkan Anda untuk melarikan diri dari hal-hal lain jika perlu. misalnya jika Anda memiliki format seperti JSON daripada XML seperti Anda mungkin ingin menghindari tanda kutip/koma/titik dua dll.

@janl bagaimana jika saya ingin membuat template yang sama dalam dua skenario: pertama lolos, kedua tidak lolos?

@bobthecow Kami dapat dengan mudah mengambil pendekatan yang sama di mustache.js dan hanya menggunakan versi yang diekspor dari Mustache.escapeHtml untuk semua pelolosan. Itu akan memungkinkan pengguna untuk melakukan sesuatu seperti:

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

Apakah itu berguna? Tentu saja, Anda harus berhati-hati untuk mengatur ulang nilai fungsi jika Anda ingin escaping berfungsi dengan baik pada pemanggilan berikutnya, dan Anda tidak akan dapat memutuskan untuk meloloskan diri dengan triple-stache.

:+1: Saya menggalinya. Sejauh yang saya tahu, kasus penggunaan utama adalah menonaktifkan melarikan diri sepenuhnya, karena ini adalah dokumen non-HTML. Saya tidak melihat banyak kegunaan untuk menukar escape/noescape (itulah sebabnya saya bahkan tidak mengimplementasikannya di Mustache.php v2).

Ya, itu pasti akan memenuhi kasus penggunaan saya, dan saya dapat membayangkan beberapa orang lain menggunakannya sebagai mengatakan:

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

untuk menghindari string. Atau mereka mungkin menerapkan fungsi daftar putih. Singkatnya itu akan memperbaiki semua kasus penggunaan yang dapat saya pikirkan.

Saya belum mengujinya, tetapi menurut halaman manual:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Jika itu tidak berhasil, Anda dapat menggunakan fungsi yang hanya mengembalikan inputnya tanpa lolos.

Terima kasih banyak!! Ini bekerja.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

SmasherHell picture SmasherHell  ·  18Komentar

chlab picture chlab  ·  11Komentar

connor11528 picture connor11528  ·  3Komentar

kuldeepdhaka picture kuldeepdhaka  ·  9Komentar

rlightner picture rlightner  ·  7Komentar