私は私たちのシステム上でコードを実行することができるシステムで作業しています。コードはサンドボックス化されていますが、コードが特定のステートメント、特にインポートを使用しているかどうかを知りたいと思っています。これは、プラットフォームのガイドラインに反する悪意のあるコードやコードを素早くチェックするために使用されます。コードは人間によって後でチェックされるため、唯一のチェックではありませんが、最悪の場合を自動的にフィルタリングすることが望ましい。特定のステートメントのためのPythonコードを確認してください
コードを実行せずに、たとえばコードがsys
(または、sys
の一部)をインポートしているかどうかを確認するにはどうすればよいでしょうか?正規表現を使ってコードを検索すると、より良い/良い方法が得られることを願っています。
ボーナスの質問:もっと複雑な声明はどうでしょうか?たとえば、モジュールbar
からfoo
を呼び出しますか?
編集:これはセキュリティに関する質問ではありません。それは、コード内の特定のステートメントを見つけることです。私のコメントを参照してください。このユーザーコードはユーザーサンドボックス内でのみ実行されるため、自分のサンドボックスを破壊することができます。しかし、彼らのコードが「認定」されれば、認定される前に他のユーザのサンドボックスで実行することができます。自動化された小切手が最悪の犯罪を発見することができれば、それは役に立ちます。
人間は非常に包括的なチェックを行う必要があります。たとえば、 'exec'コマンドを使ってここに実装する単純なシステムのやり方を見つけることができます。 – Oliver
私は間違っているかもしれませんが、ソースファイルをテキストファイルとしてスキャンする以外の方法は考えられません。Pythonインタプリタでそれらを実行させると、インポートステートメントとモジュールの前にコードを調べることができません。レベルの関数が実行されました...しかし、おそらく私は問題の一部を見逃していますか? – mac
@Oliver ...まだ...人間でさえ、コードが難読化されていると困っているかもしれません(例えばpickled/zipped/rot13'sなど) – mac