7

Codepadに少し似た、オンライン C# インタープリターを構築するというアイデアをいじっています。現在、明らかなセキュリティ上の問題があります。

  • 無限ループ
  • System.Diagnostics.Process.Start
  • ほとんど System.IO 名前空間全体

C# に関する私の知識はまったく重要ではありませんが、C# についてもっとよく知っている人がたくさんいることは間違いありません。何に気をつけますか?

いくつかの精度がありますが、Mono を使用して小さな Linux VPS でこれを実行する予定です。

4

4 に答える 4

4

Mono のCompiler をサービス機能として使用します。これは、Silverlight 互換の DLL (クライアント プロファイル) にコンパイルすることができ、既にチェックアウトすることができます。これで、IO に関するいくつかの懸念に対処できるはずです。

于 2011-03-01T23:51:25.713 に答える
1

GetType() から必要なAssemblyものに移動できるため、リフレクションが思い浮かびます。

于 2011-03-01T23:36:20.627 に答える
1

このリンクをチェックすると、オンラインの C# インタープリターで何かを学び、いくつかのことを試し、出力例外を読んで、それらがどのように作成されたかを確認できます。

http://rextester.com/NWDF62346

于 2011-12-29T23:42:00.743 に答える
1

実際、ユーザーコードは何でもできます。特殊なケースに取り組むのは難しいでしょう。私の意見では、最善の方法は次のとおりです。

a)実行権限のみを持つサンドボックス appdomain を作成します。これにより、ファイル システムをいじったり、ネイティブ ライブラリを呼び出せなくなったりするなど、多くのことが保証されます。

b)新しいプロセスを作成し、その中でアプリドメインを開始します。

次に、プロセスのメモリと CPU の消費量を厳密に監視します。何か問題が発生した場合は、それを殺してください。appdomain ではなく、強制終了できるプロセスであることに注意してください。appdomain を使用するとアンロードを試みることができますが、finally 句で悪意のあるコードが実行されている場合は機能しません。

これにはまだいくつかの(私が知っている)問題があります:

  • ユーザーがコンパイルしたアセンブリを配置する場所に注意してください。実際には、最小特権の appdomain ユーザー コードでも、同じディレクトリにあるアセンブリを読み込んで実行できます。
  • プロセスをしっかりと監視する必要があると述べました。各スレッドが同じことを行う無限ループでスレッドを生成するコード (finally 句で実行) は、(私の観察では) 非常に高速にメモリを取得します。攻撃者がそのようなコードで DOS 攻撃を行うことを決定した場合 - 何が起こるかは誰にもわかりません :) おそらく、これを利用する 1 つの方法は、ロードされたシステムで監視スレッドが適切に監視できるように、優先度の低いユーザー プロセスを開始することです。

したがって、とにかくリスクがあります。私もこのアイデアをいじっていましたが、これが現在の結果です: rundotnet

于 2011-06-12T00:06:34.023 に答える