6

Html には、Javascript を少しだけ埋め込むことができます (たとえば、onclickイベント ハンドラで定義)。

  1. C# などの dotNet 言語を使用して Html ブラウザーを作成している場合、そのような Javascript フラグメントを実行するために使用できるテクノロジまたは API は何ですか?コード)?

  2. 実行するコードが Javascript ではなく C# スニペットである場合、それは簡単ですか、それとも難しいですか?

  3. 私のコードに異常な権限を持たせる必要のないテクニックはありますか? たとえば、require のようなメソッド(これCodeCompiler.FromSourceSecurityPermissionFlag.UnmanagedCode過剰に思えます。コードをコンパイルするのがなぜそれほど危険なのかわかりません)。

  4. クライアント側のコードだけでなくサーバー側のコードも制御する場合は、そのようなスクリプト フラグメントをクライアントではなくサーバー上でコンパイルし、それをプリコンパイル済みコードとしてクライアント側に送信して実行することも検討できます。そのようなコード (おそらく dotNet アセンブリ) をネットワーク経由でクライアントに送信し、クライアント側のコードにネットワークからクライアント側の RAM にそれを受信させ、それをクライアント側で呼び出す方法はあります?クライアント側のディスク ドライブ上のファイル?


編集

最初の 3 つの質問に対する答えがあります。理由がわかりません。おそらく (これはあまり説得力のある理由ではないと思いますが) コンパイラがアンマネージ コードを使用して実装されているためです。おそらく「C#バージョン5」の時間枠で、マネージコードを使用してコンパイラを再実装すると、これが変更される可能性があります。いずれにせよ、理由が何であれ、それが現状のようであり、回避策はありません (他の同様の API ですが、必要な権限が少なくて済みます)。

私の残りの質問は、Assembly インスタンスをあるマシンから別のマシンに取得する方法です。Assembly.Load(byte[] rawAssembly)時間があれば、信頼できないコードがメソッドを実行できるかどうかを調べます。

4

2 に答える 2

2
  1. サーバー側のJavascriptは、.NETプラットフォームでサポートされている言語の1つです。小さなコードスニペットを既存のコードに挿入する必要がある場合、私はこれをシナリオで何度も使用しました。ランタイムは、データベースからロードしてコンパイルできるため、パフォーマンスの低下はありません。

  2. 配管作業(ソースの取得、コンパイルなど)の観点からは、違いはありません。強く型付けされた言語では、コードスニペットをコンパイル可能なコンパイルユニットにアセンブルするのははるかに困難ですが。

  3. 許可は確かに挑戦です。あなたが言及した特定の権限についてはわかりませんが、セキュリティが懸念されます。コンパイルするソースは何でもかまいません。コードのソースに注意しないと、システムへのバックドアになる可能性があります。

  4. これに対する答えは-もちろんそうです。アセンブリは、必ずしもファイルからではなく、どこからでもロードできます。また、メモリ内でコンパイルすることもできます。これが私が行っていることです。この場合、dllファイルはありません。

于 2009-09-14T22:13:31.123 に答える
1

あなたはいくつかの質問をしているので、そのうちの 1 つについて考えを述べます。非常に優れた記事といくつかのコード サンプルがあります: http://www.west-wind.com/presentations/dynamicCode/DynamicCode.htm は、実行時の C# コードのコンパイルと実行について説明しています。これは非常に便利で、標準の C# アプリケーションで使用しています。あなたの問題にも使えるようです。

于 2009-09-16T19:50:58.083 に答える