私はIronPythonをゲームエンジンに埋め込んでいます。ゲームエンジンでは、スクリプトをオブジェクトにアタッチできます。スクリプトがいつでもCLRにアクセスできるようにしたくありません。そうすれば、スクリプトはほとんど何でもできるからです。
特にインターネットからダウンロードした場合、ランダムなスクリプトを使用したり、インターネット接続を開いたり、ユーザーのHDDにアクセスしたり、ゲーム内の状態を変更したりできることは、非常に悪いことです。
通常、人々は「別のAppDomainを使用する」と提案するだけです。ただし、私がひどく誤解しない限り、クロスAppDomainは低速です。非常に遅い。ゲームエンジンには遅すぎます。だから私は代替案を探しています。
clrまたは任意の名前空間をインポートできないようにするIronPythonのカスタムバージョンをコンパイルして、標準ライブラリに制限することを考えました。
私がむしろ行きたいオプションは、次の行に沿っています:
__builtins__.__import__ = None #Stops imports working
reload = None #Stops reloading working (specifically stops them reloading builtins
#giving back an unbroken __import___!
私はこれを別のスタックオーバーフローの投稿で読みました。__builtins_を設定する代わりに。_ import__をnoneに設定します。代わりに、標準APIをロードできるカスタム関数に設定します。
問題は、上記の方法を使用して、スクリプトがclrモジュール、.net BCL、または潜在的に悪いことをする可能性のある他の何かにアクセスできるようにする方法はありますか?または、ソースを変更する必要がありますか?3番目のオプション?