1

私は、djangoで実行され、ユーザーが自分のキャラクターを制御するpythonコードをアップロードできるcorewarsタイプのアプリケーションを作成しています。これに対する本当の答えは、信頼されていないユーザーからコード入力を受け取っている限り、セキュリティの脆弱性があるということです。リスクを最小限に抑えようとしているだけです。心に浮かぶいくつかを次に示します。

  • __import__(おそらく ast スキャンを実行して、インポート ステートメントがないことを確認します)
  • open
  • file
  • input
  • raw_input

私が見逃している人は他にいますか?

4

6 に答える 6

3

http://wiki.python.org/moin/SandboxedPythonには、Pythonの制限について一般的に何をすべきかについて多くの回答があります。しばらく前にそれを見たとき、Zope RestrictedPythonは、ホワイトリストシステムで動作する最良のソリューションに見えました。セキュリティの脆弱性を公開しないように、独自のコードに注意を払う必要がありますが、それが最高のシステムのようです。

于 2010-11-13T02:57:08.960 に答える
2

あなたはこれをやろうと決心しているように思われるので、標準のrexecモジュールにリンクします。これは、使用する必要があると思うからではなく(使用しないでください。既知の脆弱性があります)、Webサーバーは、独自の制限付き実行フレームワークを危険にさらしました。

特に、「制限された環境の定義」という見出しの下に、rexec設計者によって合理的に安全であると見なされたいくつかのモジュールと機能がリストされています。これらは、ある種の初期ホワイトリストとして使用できる可能性があります。また、あなたが考えもしなかったかもしれない他の落とし穴についてそのコードを調べることをお勧めします。

于 2010-11-13T02:53:58.077 に答える
2

ええ、ホワイトリストに登録する必要があります。悪いコマンドを隠す方法はたくさんあります。

これは最悪のシナリオではありません。

最悪のシナリオは、誰かがデータベースに侵入することです

最悪のシナリオは、マシン全体がルート化され、他のマシンをプローブしてパスワードをキーログするときに気付かないことです。このマシンを分離し、敵対的であると見なします(DMZ、内部および外部から攻撃を開始できないようにブロックするなど)。書き込み不可能なメディアでtripwireまたはAIDEを実行し、すべてを2番目のホストに記録します。

最後に、plashが示すように、保護する必要のある危険なシステムコールがたくさんあります。

于 2010-11-13T05:13:47.320 に答える
2

あなたは本当にevalを避ける必要があります。次のようなコードを想像してください。

eval("__impor" + "t__('whatever').destroy_your_server")

これはおそらく最も重要なものです。

于 2010-11-13T02:37:04.790 に答える
1

ゲーム内の言語として Python を使用することにコミットしていない場合、1 つの可能性として、LunaticPython を使用して Lua を埋め込むことができます ( https://code.launchpad.net/~dne/lunatic-python/bugfixesのバグ修正ブランチをお勧めします)。 )。

Python よりも Lua をサンドボックス化する方がはるかに簡単で、独自のプログラミング言語を作成するよりも Lua を組み込む方がはるかに簡単です。

于 2010-11-13T08:53:00.570 に答える
1

ブラックリストではなく、ホワイトリストを使用する必要があります。ブラックリストを使用すると、常に何かを見逃すことになります。そうしなくても、Python は標準ライブラリに関数を追加し、ブラックリストの更新は間に合いません。

現在許可しているが、おそらく含めるべきではないもの:

  • compile
  • eval
  • reload(何らかの方法でファイルシステムにアクセスする場合、これは基本的にですimport)

これを正しく行うのは非常に難しいことに同意します。複雑な問題の 1 つ (多くの中で) は、ユーザーが別のクラスのフィールドを介してこれらの関数の 1 つにアクセスする可能性があります。

これの代わりに、またはこれに加えて、仮想マシンなどの別の分離メカニズムを使用することを検討します。コードパッドがどのようにそれを行うかを見るかもしれません。

于 2010-11-13T02:36:35.657 に答える