0

そのため、Python API を公開するサードパーティ アプリケーションがあります。そのサードパーティアプリケーションで必要なことを実行するPythonスクリプトがあります。

Python スクリプトはコマンド ライン引数のみを使用し、ユーザー入力は使用せず、stdout に書き込みます。

ASP.NET Web サイトから実行時に起動されるように配線しています。Python は非常に強力なので、ハードコードされた、またはローカルで読み取られた (App.Config) スクリプト パスを使用して Python プロセスを起動し、そのコマンド ライン引数をパイソンプロセス。

この新しい実行可能ファイルは、攻撃者が任意の Python コードをアップロードして起動するのを防ぐ方法として、.NET アプリケーションから起動されるのでしょうか? これは攻撃ベクトルを無効にしますか、それとも複雑さが増しただけですか?

また、サードパーティの拡張機能は CPython 専用に作成されているため、IronPython は使用できません。

コードのアイデア:

Process p = new Process();
p.StartInfo.FileName = "python.exe";
p.StartInfo.Arguments = "goodscript.py \"" + argument1.Replace("\"","\\\"") + "\" \"" +
  argument2.Replace("\"","\\\"") + "\"";
p.Start();

-i のようなコマンド ライン スイッチが挿入されるか、goodscript.py へのファイル パスが別のスクリプトを指すように変更される可能性があるのではないかと心配しています。後者が可能であれば、実際には python.exe へのファイルパスを別の実行可能ファイルパスに変更できると思います。

4

3 に答える 3

2

サンプル コードには確実にセキュリティ上の懸念があります。Process.StartInfo がそこでどのように機能するかわかりません。サブプロセスを実行する前に引数を分割する場合、またはシェルを使用してそれを行う場合、いずれにしても、少なくとも攻撃者が引数文字列にバックスラッシュを入れて二重引用符のエスケープをだます余地があります.

引数を文字列にパックして別の方法で解析させるのではなく、引数を個別に伝える方法が他にある場合は、それがはるかに望ましいでしょう。

于 2012-05-18T21:16:31.923 に答える
1

Python スクリプトは Web サイトによって呼び出されます。誰かが Web サイトを使用して、Python スクリプトを別の引数で呼び出したり、別のスクリプトを実行したりできる場合、それセキュリティ ホールです。「Python は非常に強力」とは関係ありません。これは、任意の言語を呼び出すためのセキュリティ上の問題になります。

Python スクリプトを別のものでラップし、代わりにそれを呼び出すことによって、これがどの程度正確に影響を受けると思いますか? 誰かが別の実行可能ファイルを呼び出したり、別の引数や別のデータで呼び出されたりする可能性があります。または、できない場合は、どの言語を呼び出しても問題ありません。

于 2012-05-19T02:55:58.070 に答える
0

現状では、スクリプトは複雑さを増すだけでなく、実際にセキュリティ ホールを開いています。つまり、事前にトークン化された文字列のリストとしてではなく、解析する必要がある単一の文字列を引数に渡しているということです。

于 2012-05-19T02:46:58.683 に答える