0

マルチユーザー Web アプリケーションを構築しています。各ユーザーは、アプリケーションの下に独自のサイトを持つことができます。ユーザーがセキュリティ上の問題なくテンプレートを変更できるようにする方法を検討していますか? Python テンプレート エンジンをいくつか評価しました。たとえば、genshi は非常に優れたテンプレート エンジンですが、genshi テンプレートをユーザーが変更できるようにするのは危険です。次のような構文があります。

<?python

?>

この構文を使用すると、Python で実行できることは何でも実行できます。パラメータを渡すことでシャットダウンできるようです。しかし、まだ多くの潜在的な問題があります。たとえば、ユーザーは組み込み関数や渡された変数のメソッドにアクセスできます。たとえば、ORM オブジェクトをテンプレートに渡すとします。ユーザーに触れさせたくないメソッドと変数が含まれている可能性があります。これが好きかもしれません:

site.metadata.connection.execute("drop table xxx")

私の質問は、ユーザーがセキュリティの問題なしに自分のサイトのテンプレートを変更できるようにするにはどうすればよいですか? 任意の python テンプレート エンジンを使用できます。

ありがとう。

4

4 に答える 4

5

Jinja2 は、サンドボックス機能を備えた Django 風のテンプレート システムです。サンドボックスを使おうとしたことはありませんが、Django のテンプレートの代わりとして Jinja2 がとても気に入っています。ビジネス ロジックからのテンプレートの分離を引き続き促進しますが、より多くの Pythonic 呼び出し規則、名前空間などがあります。

Jinja2 サンドボックス

于 2009-02-15T06:56:10.297 に答える
1

Django テンプレートエンジンを見てください。任意の python コードの実行はサポートされておらず、アクセス可能なすべての変数は明示的にテンプレートに渡す必要があります。これは、ユーザーがカスタマイズ可能なページを作成するための非常に優れた基盤となるはずです。ユーザーからの時折の構文エラーを処理する必要があることに注意してください。

于 2009-02-15T05:18:01.577 に答える
0

レールにはLiquidと呼ばれるものがあります。あなたはそれを見て、いくつかのアイデアを得るかもしれません。別のアイデア: 少なくとも、できることの 1 つは、オブジェクトを単純な辞書 (json 表現のようなもの) に変換してから、テンプレートに渡すことです。

于 2009-02-15T05:25:28.517 に答える
-1

短い答えは、おそらく「できません」です。

おそらく最善の方法は、個々のユーザーを仮想マシンまたはサンドボックスに閉じ込めることです。

于 2009-02-15T04:49:51.097 に答える