From: Akinori MUSHA Date: 2014-07-16T17:35:35+09:00 Subject: [ruby-list:49886] Re: テンプレートシステムを安全に使う --pgp-sign-Multipart_Wed_Jul_16_17:35:32_2014-1 Content-Type: text/plain; charset=ISO-2022-JP At Mon, 07 Jul 2014 12:25:55 +0900, 5.5 wrote: > しかし,テンプレートシステムなので,任意の Ruby コードを書くことができ > てしまいます。 > 自分だけ,あるいは仲間内でだけ書くならいいですが,匿名参加可能な多人数 > のプロジェクトだと,これって危険ですよね。 > > どうにか安全にする方法ってあるんでしょうか? > > なんというか…たとえばテンプレート中で何をやっても,影響を封じ込める仕 > 組みとか,Haml や Slim のサブセットみたいなものを作って,やれることを > 制限しちゃうとか。 > いろいろ想像したのですが,自分にできそうなことは思いつきませんでした。 そうした用途には Liquid や Mustache が向いていると思います。 前者は Shopify がASP提供するショッピングカートシステム用に設計されたも ので、ユーザに十分なデザインの自由を与えつつ、負荷やセキュリティ面でま ずいことをされないように十分考慮されています。多機能で拡張性も高く、ア プリケーション固有のニーズやコンテキストに沿ってカスタマイズ可能です。 http://liquidmarkup.org/ 後者は Logic-less templates の名前の通り、YAMLやJSONで表現できるような データ構造の参照と簡単な真偽判定くらいに機能が限定されています。ミニマ リスト向け。やっぱりロジックが欲しい、というときはHandlebarsという拡張 を追加する感じ。 http://mustache.github.io/ どちらもRubyコミュニティから生まれたものですが、他言語による実装も豊富 なので、安心して使えると思います。 -- Akinori MUSHA / https://akinori.org/ --pgp-sign-Multipart_Wed_Jul_16_17:35:32_2014-1 Content-Type: application/pgp-signature Content-Transfer-Encoding: 7bit Content-Description: OpenPGP Digital Signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iEYEABECAAYFAlPGOVQACgkQkgvvx5/Z4e4tUACg0hCoaFtYYqG4Wh9/fFcssGze OwIAoMWHdCm9Zex+N8tuEbrd73ByCwa7 =zh4n -----END PGP SIGNATURE----- --pgp-sign-Multipart_Wed_Jul_16_17:35:32_2014-1--