5

私の質問の一般的な性質を前もってお詫びしますが、ウェブ上で私と同じことをしようとしている人々から有益なアドバイスを見つけることができませんでした. 私のシナリオを説明しましょう:

Web サイトのエンド ユーザー/デザイナーに、(Razor を使用して) ビューをデータベースに保存することで、ビューをカスタマイズする機能を提供しています。私はこれをすべて機能させていますが、私の質問は次のとおりです。セキュリティの観点から、不要なコードがユーザー定義ビューで実行されないようにするにはどうすればよいですか? 概念的には機能すると思われる基本的なアプローチが 2 つありますが、どちらがより可能性が高いか、または実現可能かはわかりません。

オプション 1: ユーザーがビュー コードを入力できるようにする検証メソッドを管理ツールで作成します。これは、何が許可されるか、または許可されないかについて、ホワイトリストまたはブラックリストのアプローチを取る必要があります。

オプション 2: ビューのレンダリング時に不要なコードが実行されないようにします。

ブロックする必要があるものの簡単な例として、web.config で、ファイルの読み取りまたは書き込み、データ アクセス機能へのアクセス、構成設定へのアクセスなどへのアクセスを許可したくありません。おそらく許容されるべきではないものの適切なサイズのリストが存在する可能性がありますが、私は座って、できるだけ多くのセキュリティ関連の懸念事項について考える必要があります.

私の質問は、どの方法が最善の策でしょうか? また、どのように進めるかについての指示を提供できますか? オプション 2 となる信頼レベルベースの変更を行うことができるかもしれないと考えましたが、ビューごとのマナーでそれを機能させる方法が見つかりませんでした (管理コードは必要なものを実行できます)。オプション 1 が最善の策であり、許可されるべきではない特定のフレームワーク関数の入力を確認する必要があると考えています。私がやろうとしていることのようなことをした経験がある人はいますか? どんなフィードバックでも大歓迎です!

4

1 に答える 1

1

これは非常に難しいでしょう。

Razor プリプロセッサを介してテンプレートを実行し、Roslyn (まだ初期ベータ版) を使用して生成されたファイルを解析し、すべてのメソッド呼び出し (またはコンストラクター) を調べて、気に入らないものを呼び出す場合はエラーを返すことができます。
そのためにはホワイトリストを使用することを強くお勧めします。.Net フレームワークは十分に大きいため、ブラックリスト内の何かを見落とす可能性があります。


ただし、代わりに、Razor をまったく使用せず、実際の C# コードを許可しないテンプレート エンジンを使用することをお勧めします。

于 2012-04-27T14:20:46.677 に答える