6

私はアプリを書いていますが、ユーザーがコーナー ケース用の python ファイルを入力できるようにしたいと考えています。私の頭では、これを行うことを考えることができる最良の方法は、ファイルをディスクに保存し、その場所をDBに保存してから、動的にインポートして__import__()実行することです。私の質問の最初の部分は次のとおりです。これはこれを行うための最良の方法ですか?

また、これにより、かなり大きなセキュリティ上の懸念が生じます。モジュールを制限下で実行する方法はありますか? ファイルシステムなどを見せないようにするには?

編集:

Python の実行は、「通常」の範囲外のバックエンド サービスからデータを取得することになるため、完全なアプリケーションにはなりません。カスタム プロトコルの定義にすぎない可能性があります。

4

3 に答える 3

3

compileメモリ内で実行するためにとexecビルトインを組み合わせて使用​​できます。欠点は、トレースバックでソース行を取得できないことです。

ただし、セキュリティについてはあまり期待できません。すべてを 1 つの式に制限し、ほとんどの組み込み関数を削除するなど、途方もなく制限的なフィルターを配置したとしても、任意のコードが実行される可能性があります。コードが同じプロセスで実行されるため、ファイル システム アクセスや他の OS リソースへのアクセスを Python 内から禁止することも困難です。厳しい制限 ( chrootjailulimitなど) を持つ子プロセスが存在する可能性はありますが、それは多くの作業を伴うだけでなく、ホスト アプリケーションとのやり取りのほとんどの手段を排除します。

アプリケーションがローカルで実行され、ユーザーのアカウントと同じアクセス許可で実行されている場合は、おそらく何も心配せず、より多くの権限を与えるのが最善の方法です。 (それが何であれ)より難しい/より迷惑です。一方、コードがサーバーなどで実行される場合は、同じプロセスで実行することを忘れてください。

于 2013-06-04T16:19:30.687 に答える