6

Pythonサンドボックスをセットアップしようとしていますが、標準およびファイルI/Oへのアクセスを禁止したいと思います。実行中のPythonサーバー内でサンドボックスを実行しています。

私はすでにRestrictedPythonとのようなモジュールを見てきましたPyPy; ただし、外部プロセスではなく、実行中のPythonサーバー内でサンドボックスコードをコンパイルできるようにしたいと考えています。

print、、、などのコマンドへのアクセスを防ぐための代替方法はありますraw_inputopen?前述のモジュールは、実行中のPythonプログラムでサンドボックスコードをコンパイルする方法で使用できますか?

最悪の場合、どのようにしてアクセスを阻止しますraw_inputか?

編集: Pythonコードを安全に評価するためのこのチュートリアルによると、操作された組み込みモジュールを渡すことは可能でしょうか?

4

1 に答える 1

5

これに関する大まかなコンセンサスは、CPythonの複雑さと内省能力により、インタープリターの一部をブラックリストに登録するという信頼性の低い試みが行われるというものです。主な試みの1つは、tavのセーフライトだったと思います。また、 CPythonをクラッシュさせることもそれほど難しくありません。これにより、任意のコードの実行から悪用される別のパスが開かれます。リソースの枯渇や任意のコードからのCPU使用のDoSを回避することは、インプロセスで実行することはおそらく不可能です(ウォッチドッグ、システム制限などが必要になります)。

Pythonでサンドボックス化されたコードを実行したい人にとって重要なことは、自分でコードを実行すること(または単に変更すること)を避けることですsys__builtins__それが堅実であると確信するのは非常に簡単ですが、保護をバイパスする明らかな回避策を見逃します。Pythonには、この種の保護を提供するモジュールが含まれていたこと、さらにはその制限を回避できる明白な問題があったことを覚えておいてください。IIRC、それは制限された環境への制限されていないオブジェクトの釣り(内省による)に対して脆弱でした。

とは言うものの、pysandboxはコアPython開発者によって書かれており、IOなどを制限するときに安全であると信じており(そして以前の多くの研究が組み込まれています)、必要に応じてインプロセスで実行できます(DoSなどの機能はいくつかありますが) CPUとメモリの使用からの保護)。

于 2012-04-22T21:19:39.493 に答える