2016-08-08 18 views
3

私はあなたから新鮮なアイデアが必要です。os関数へのpythonスクリプトへのアクセスを制限する

私は自分のPythonスクリプトをアップロードしてサーバーの1つで実行できるシステムを実装しています。

私はセキュリティ上の問題について注意しています。このスクリプトからオペレーティングシステムへのアクセスを制限したいと思います。

など、すべてのスクリプトがexecimportのような多くの最も明白なキーワードへのアクセスを許可しないようにastパーサで検証を受けるのまず、open

ユーザーは、しかし、いくつかのライブラリの使用を宣言することができます。重要なものの1つはpandasライブラリです(matplotlibnumpyなども提供する必要があります)。私は、モジュールを模倣するが、onyの限定された属性セットへのアクセスを提供する、 'プロキシ'オブジェクトを実装しました。たとえば、代理オブジェクトjsonを提供できますが、機能loadsまたはdumpsへのアクセスは許可されていません。

任意のオブジェクトから属性os,sysなどの属性を取得するための最も明白な試みも許可されていません。このようにして、ユーザーがosモジュールにjson.osという名前でアクセスしようとしたときに穴を閉めようとしています。

これは機能しますが、シンプルなシールドです。私はすべてのモジュールを見直し、危険な機能のほとんどにアクセスすることを禁止することができますが、見逃した人でも潜在的な被害につながる可能性があります。また、一部のモジュールは、pandas.tools.util.pdが元のpandasモジュールを参照するようなやり方でアクセスすることができます。

私はファイルシステムレベルでのアクセスを制限することを考えましたが、スクリプトはevalのメインプロセス(celeryベース)内で実行され、同じアクセス許可を持ちますユーザー)をメインプロセスとします。理論的には、すべてのソースを読み込んでユーザーに渡すことができます。

私の考えの1つは、ソースとアクセス許可の最小限のセットで別のプロセスでスクリプトを実行し、パイプでデータを渡すことです。しかし、これは多くのコードをリファクタリングする必要があり、安定性は保証されません - それを動作させるためにはまだ多くのコードが必要です。

答えて

関連する問題