Webアプリケーションは常にユーザーにサーバー上でコードを実行させ、通常はデータからHTMLを生成します。そのプロセスは非常にロックダウンされており、サーバーに対する権限は必要ありません。そのコードがASPであるかPythonであるか、あるいはその両方であるかどうかは、実際には問題ではありません。ただし、次のCコードを使用する場合を除きます。
- あまりテストされていない
- バッファオーバーフローが発生しやすい
この回答は、カスタムビルドのCOMオブジェクトを使用している場合にも当てはまります。
考えられる技術的な問題(適切な処理など)は別として、信頼の境界PYTHONPATH
を確認する必要があります。つまり、信頼できるものになる前に、クライアントから送信されたデータに対して何らかの作業を行う必要があります。そうして初めて、アセット(データ)に送信することができます。
その動作はアプリケーションによって異なりますが、おそらく次のようになります。
- ユーザーを認証する
- 入力を検証します
- 安全なAPIとコーディング手法を使用する
多くの場合、ハードワークはステージ2にあります。たとえば、スケジューリングアプリケーションでは、ユーザーが送信したタスクを盲目的にスケジュールするのではなく、特定の影響の少ないタスクを1回だけ実行するようにスケジュールできます。
Pythonスクリプトアプリケーションについても同じことが言えます。ただし、ステージ3も検討する必要があります。Cコードにはセーフガードが組み込まれていないため、オーバーフロー攻撃が発生しやすくなります。
より明確にするために、アプリケーションの高レベルの図で信頼境界を特定します。これが1つの試みです:
アプリケーションの各部分には役割があり、何らかの形式の検証なしに信頼の境界を越えることはできません。
例えば :
- 堅牢なコードを活用できるように、できれば組み込みのメカニズムを使用してユーザーを認証します
- Pythonスクリプトコードは入力を検証します。Python ESAPIライブラリはまだベータ版ですが、OWASP入力検証のチートシートは良いスタートです。繰り返しますが、これは難しい部分です。
- (可能であれば)DLLコードを確認し、すべての文字列操作ルーチンを安全な対応するルーチンに置き換えます。ただし、これは元のプロジェクトよりも大きな作業になる可能性があります。
悲しいことに、インフラストラクチャは役に立ちません。これがイントラネットアプリケーションであったとしても、ユーザーが事前によく知られている場合は、ほとんどの場合、認証段階でのみ役立ちます。
最後に、古い学校のセキュリティ対策が引き続き適用されることを忘れないでください。
- ネットワークセキュリティ(ファイアウォール、リバースプロキシなど)
- 必要なサービスのみを実行する
- パッチを適用してログを監視する
- 特権がほとんどないワーカープロセスでアプリケーションを分離する(ローカルサービスなど)
- データベースアクセスに低特権アカウントを使用する