web-dev-qa-db-ja.com

PL / Pythonが信頼できないのはなぜですか?

ドキュメントによると:

PL/Pythonは「信頼されていない」言語としてのみ利用可能です。つまり、ユーザーが実行できることを制限する方法を提供していないため、plpythonuという名前が付けられています。セキュアな実行メカニズムがPythonで開発された場合、信頼できるバリアントplpythonが将来的に利用可能になる可能性があります。

Pythonでは安全な実行メカニズムを開発するのが難しいのに、Perlなどの他の言語では難しいのはなぜですか?

11
foobar0100

これは、Pythonのオブジェクトモデルに関係しています。安全ではない可能性のあるオブジェクトへの参照を取得する方法は常にあります。問題の詳細については、 rexecモジュールのドキュメント および ドキュメントの制限付き実行の章 を参照してください。

制限はPostgreSQL自体とは何の関係もありません。CPythonインタープリター実装に固有であるか、またはPython言語自体でさえあります。

他のいくつかの言語は、Perl、Java、JavaScript、Luaなどのランタイムをチェックしています。それらのほとんどは一連のセキュリティ問題に直面しています。そのような制限された実行環境は、起こり得るすべての脱獄の悪用から保護することが非常に難しいためです。

Rexecは多くの目的で「十分」であるので、PostgreSQLが準信頼のPythonインタープリターを追加することを妨げるものは何もありません。それはおそらく、スーパーユーザーのみとマークされている場合にのみ受け入れられますが、特定のユーザーにアクセスを許可することもできます。信頼できないPythonよりも優れています。

個人的には、ここではPL/V8または類似のものが将来だと思います。コアでサポートされるようになることを期待しています。

私は漠然と C#、VB.NET、IronPythonなどで書かれた「安全な」アセンブリをロードできる信頼できるMono のアイデアを探求しましたが、そのトピックについて多くのことを行うことができませんでした。

13
Craig Ringer