13

私が作成した多くのPythonアプリケーションでは、構成ファイルとして使用される定数のみを含む単純なモジュールを作成することがよくあります。さらに、構成ファイルは実際にはPythonコードファイルであるため、デバッグレベルなどに応じて変数を変更するための簡単なロジックを追加できます。

これは内部アプリケーションには最適ですが、誰かが誤って、または悪意を持ってファイルに破壊的なコードを追加することを恐れて、そのようなアプリケーションを公開することには注意が必要です。Pythonを埋め込みスクリプト言語として使用する場合も同じことが言えます。

埋め込みに「安全」と見なされるPythonのサブセットはありますか?私はそれがどれほど安全であると考えることができるかはかなり主観的であることを理解しています。ただし、JavaアプレットとFlashはどちらも、セキュリティサンドボックスが明確に定義されています。同様のルールを持つPythonのバージョンがあるかどうか疑問に思っていますか?

編集:私は設定ファイルのアプローチのためにそれほど多くを求めていませんが、新しいアプリにいくつかのスクリプト/プラグインメカニズムを実装することに興味があり、プラグインまたはスクリプトがたとえば削除できるようにしたくないためですファイル。これは、アプリケーションが実行できるはずの範囲を超えています。

4

13 に答える 13

10

ここに、あなたが何に反対しているのかについてのアイデアを与えるためのいくつかのリンクがあります:

http://code.google.com/p/sandbox-python/にも死んだグーグルコードプロジェクトがあります

于 2009-05-14T07:12:56.847 に答える
4

PyMite VMは、単純な変数、ループ、条件、および関数を設定するだけでよい場合に適しています。PyMiteは小さく、Cで記述されており、静的メモリプールを使用し、埋め込むことができます。設定が簡単な組み込み関数のセットは非常に限られています。同様に、唯一の標準ライブラリは、string、dict、list、およびsysの部分的な実装です。PyMite VMはpython-on-a-chipプロジェクトの一部であるため、マイクロコントローラーで実行するように設計されていますが、posixスタイルのデスクトップシステムで実行できます。欠点は、PyMiteが他のPython実装ほど広範囲にバグが除去されていないことです。

于 2009-07-16T01:30:08.100 に答える
4

pypy プロジェクトはサンドボックス機能を提供します。 http://doc.pypy.org/en/latest/sandbox.htmlを参照してください。

于 2009-05-14T06:41:01.370 に答える
4

いいえ、「安全な」Python の本番対応サブセットはありません。Python にはいくつかのサンド ボックス モジュールがあり、これらは欠陥のために廃止されました。

最善の策は、独自のパーサーを作成するか、syscall フックと監禁されたアカウントを使用して Python プロセスを分離することです。

PyPy を指し示す人もいるかもしれませんが、それは未完成です。

于 2009-05-14T06:42:57.073 に答える
3

AFAIK、標準のPythonライブラリでいくつかの試みが行われましたが、成功しませんでした。詳細については、実行制限を参照してください。

警告

Python 2.3では、これらのモジュールは、さまざまな既知の簡単に修正できないセキュリティホールのために無効になっています。モジュールは、rexecおよびBastionモジュールを使用する古いコードを読むのに役立つようにここに文書化されています。

于 2009-05-14T07:09:14.250 に答える
3

tinypy ( tinypy.org ) は、Lua のスタイルで記述された、組み込み可能な小さな Python サブセットになるように作成されました。また、lua にはサンドボックスを作成する方法があるため、tinypy も同じようにハッキングされる可能性があると推測されます。tinypy のコード ベースは非常に小さいため、ニーズに合わせて変更する方法を学び、理解するのは非常に簡単です。

于 2009-06-24T01:49:19.857 に答える
1

誰かが誤って、または悪意を持ってファイルに破壊的なコードを追加することを恐れて、そのようなアプリケーションを公開することには慎重です。

「公開されていない」ネイティブ コードは、この攻撃に対して同様に脆弱です。機械語であることは単なるスピード バンプであり、セキュリティはありません。

あなたが非常に偏執的で、より速いスピードバンプが必要な場合は、スクリプト インスタンスをホストするネイティブ アプリにコンテンツのハッシュをチェックさせることができます。その場合、偶発的な変更は不可能です。チェックサムを更新する手間がかかるのは、意図的な変更だけです。さらに進んで、公開鍵でも署名されていることを確認できます。ネイティブ アプリをハッキングするだけで、新しいスクリプトが入り込む可能性があります。

しかし、サンドボックス?ご心配なく!

于 2009-05-14T07:15:18.853 に答える
1

これらの人が印象的にやっているように見えるので、Silverlight/Moonlight で IronPython を試してみてください。Resolver One 開発者からのこれらのタイプの IronPython アプリケーションに関する多くの優れた情報がここにあります

于 2009-05-14T07:35:37.197 に答える
1

Java 仮想マシンまたは .NET ランタイム内でどのようなセキュリティ機能が得られるかについてはよくわかりませんが、Python コードをJythonまたはIronPythonで実行することでセキュリティを強化できるかどうかを検討することをお勧めします。

于 2009-05-14T07:37:09.130 に答える
1

何をしようとしているのかを理解するのは少し難しいです。詳細が不十分です。

ネイティブ アプリをホストし、ユーザーがプラグインを作成できるようにしていますか? Python アプリケーションを jail/chroot/similar 内の個別のランタイム プロセスとして実行し、ソケット経由で通信することにより、OS レベルのソリューションを使用することを検討してください。

顧客がネイティブ アプリをホストし、「信頼できない関係者」にプラグインを作成させることを期待していますか? 上記の解決策が機能しない理由はありますか? (例えば、顧客はそのようなオプションのない奇妙な OS にデプロイしたいと考えています...)

同じ人々がネイティブ アプリと「信頼されていないスクリプト」をホストすることを期待しており、それらを自分自身から保護したいと考えていますか? 彼らが「os.remove」を書くことから保護し、彼らが書いたことを実行させるという意味で?理由を説明できますか?

より厳しい制約 (最大 CPU サイクル、最大メモリ、メモリ所有権の問題など) がなければ、サンドボックス化だけでは不十分な場合が多いことに注意してください。どんな悪意を止めたいですか?ここでも、OS には優れた機能 (優先度、プロセスの強制終了、ulimits) があり、すべてのサンドボックス環境が複製するわけではなく、OS のものよりもセキュリティ テストが確実に少ないことに注意してください。(私は、PyPy が悪意のあるコーダーが無限の量のメモリを占有できないようにする前に、Linux が破ることができる ulimit を持たないことを信頼します。これは、単に Linux が実際に攻撃されているからです。)

于 2009-06-16T09:27:19.593 に答える
0

これはあなたが望むもののように聞こえます:Python制限モードを復活させます。

__builtins__Pythonインタープリターには、魔法の変数を変更することで有効になる「制限付き」モードが組み込まれています。Pythonインタープリターを保護するための道を開くという記事では、このトリックについて詳しく説明しています。完全に機能するには、Pythonインタープリターへのパッチが必要であることに注意してください。すでに適用されているかどうかはわかりません。

純粋なPythonの概念実証については、彼の以前の投稿「Pythonのセキュリティを破る挑戦」を参照してください。

于 2009-07-16T02:00:45.537 に答える
0

For some discussion on issues previously met with the rexec module:

These came from Restricted Execution HOWTO.

于 2009-05-15T01:03:10.660 に答える