私はあなたから新鮮なアイデアが必要です。os関数へのpythonスクリプトへのアクセスを制限する
私は自分のPythonスクリプトをアップロードしてサーバーの1つで実行できるシステムを実装しています。
私はセキュリティ上の問題について注意しています。このスクリプトからオペレーティングシステムへのアクセスを制限したいと思います。
など、すべてのスクリプトがexec
、import
のような多くの最も明白なキーワードへのアクセスを許可しないようにast
パーサで検証を受けるのまず、open
、
ユーザーは、しかし、いくつかのライブラリの使用を宣言することができます。重要なものの1つはpandas
ライブラリです(matplotlib
、numpy
なども提供する必要があります)。私は、モジュールを模倣するが、onyの限定された属性セットへのアクセスを提供する、 'プロキシ'オブジェクトを実装しました。たとえば、代理オブジェクトjson
を提供できますが、機能loads
またはdumps
へのアクセスは許可されていません。
任意のオブジェクトから属性os
,sys
などの属性を取得するための最も明白な試みも許可されていません。このようにして、ユーザーがos
モジュールにjson.os
という名前でアクセスしようとしたときに穴を閉めようとしています。
これは機能しますが、シンプルなシールドです。私はすべてのモジュールを見直し、危険な機能のほとんどにアクセスすることを禁止することができますが、見逃した人でも潜在的な被害につながる可能性があります。また、一部のモジュールは、pandas.tools.util.pd
が元のpandas
モジュールを参照するようなやり方でアクセスすることができます。
私はファイルシステムレベルでのアクセスを制限することを考えましたが、スクリプトはeval
のメインプロセス(celery
ベース)内で実行され、同じアクセス許可を持ちますユーザー)をメインプロセスとします。理論的には、すべてのソースを読み込んでユーザーに渡すことができます。
私の考えの1つは、ソースとアクセス許可の最小限のセットで別のプロセスでスクリプトを実行し、パイプでデータを渡すことです。しかし、これは多くのコードをリファクタリングする必要があり、安定性は保証されません - それを動作させるためにはまだ多くのコードが必要です。