6

私は、テンプレート、いくつかのビジネスオブジェクトを受け取り、HTML を生成してから PDF にする機能のようなメールマージを持っています。

RazorEngineを使用して、テンプレート + モデルを HTML ビットに変換しています。

ユーザーにテンプレートを指定させるとしたら、どのようなリスクがありますか? リスクを軽減することは可能ですか?

たとえば、ユーザーは任意のコードを実行できますか? (ファイルの削除、データベースの変更など?) このようなことを検出できる方法はありますか? (一般的には不可能であることはわかっていますが、かみそりテンプレートのコードのビットは、モデル プロパティの取得、またはモデル プロパティ値に基づく if ステートメントである必要があります)。

私は基本的にここのユーザーを信頼しています (これは小規模なプライベート プロジェクトです) が、テンプレート エンジンが進むにつれて、このエンジンはこのアプリケーションに対して過度に強力に見えます。

4

3 に答える 3

11

IsolatedTemplateServiceバージョン 3 では、別の でのテンプレートの解析/コンパイルをサポートする を導入しましたAppDomain。テンプレートがコンパイルされるアプリケーション ドメインの作成を制御できます。つまり、子アプリケーション ドメイン自体にセキュリティ ポリシーを適用することで、必要なセキュリティ要件を導入できます。

今後のプッシュでは、パイプラインに拡張機能を追加するための一般的な方法を導入したいと考えています。これにより、コード生成検査などを行うことができます。これにより、コンパイル前に生成されたコードの型チェックのシナリオが可能になると思います。

数日前に、RazorEngine (v3) の初期バージョンを GitHub にプッシュしました。お気軽にチェックしてください。https://github.com/Antaris/RazorEngine

于 2011-10-14T13:17:37.073 に答える
5

cshtmlRazorファイルは任意のファイルを実行できます。サイトのコンテキストでのNETコードなので、そうです。ユーザーによる提供を許可することはセキュリティ上のリスクです。

モデルデータを入力するためのカスタムトークンを使用して、より一般的なHTMLテンプレートを受け入れる方がよいでしょう。

于 2011-10-14T12:10:29.323 に答える
1

usingステートメントを削除し、正規表現を使用する@System.[...]ようなものを置き換えるSystem.IO.File.Delete(filepath)ことで、セキュリティホールの可能性をかなり減らすことができると思います。

テンプレートはコンテキスト内で実行され、テンプレートで使用可能なものにのみアクセスできますが、.NETFrameworkアセンブリも含まれることに注意してください。

于 2011-10-14T12:09:30.370 に答える