IISに展開されたASP.NETアプリケーションを構築しており、Content-Encoding: gzip
のサポートを有効にするために必要な手順に従うことに積極的に取り組んでいます。
私が取り組んでいるサーバーをパブリックWebに展開する計画は現在ありませんが、少なくともサーバーに対するZipBomb攻撃を軽減するためのオプションを調査したいと思います。クライアントがパブリックチャネルを介してユーザーがアプリケーションを利用できるようにすることを決定した場合、私はすでにアヒルを一列に並べたいと思います。
GZ POSTボディを通過させる方法を理解できるとしたらIIS(SO =それに関連して)ファイルを解凍せずに非圧縮コンテンツのサイズを検出するための私のオプションは何ですか?
実例として-誰かが私のサーバーに42をPOSTした場合、内容を解凍すると爆弾が爆発します。 「この」42kbが4.5PBのデータを表すことを検出し、それを拒否するオプションはありますか?
爆弾を爆発させたり、コンテンツを固定サイズのバッファにストリーミングしたりせずに、zip形式のコンテンツが階層化されていることをプログラムで検出するにはどうすればよいですか?
(つまり、実際に開かずにZipファイルの内容を調べるために一般的に適用できるユーティリティ、サービス、または方法論はありますか?)
Zip形式は、圧縮ファイルサイズと非圧縮ファイルサイズの両方を指定します。これらのヘッダーを解析すると、必要な情報を抽出できるはずです。
Zipヘッダーの詳細については、 ここ を参照してください。
他の回答で示された検出とは別に、サーバーの操作にとって重要ではない特定のパーティション(つまり、/パーティションではなく、/ tmpでもないなど)で強制的に解凍することで、インパックを軽減できます。
たとえば、これを動的に行うこともできます。たとえば、2GBファイルを(さらに別のパーティションで)作成し、フォーマットして(mkfsなど)、適切なマウントポイント(ユーザーのホームディレクトリの下の特定のサブディレクトリなど)にマウントします。新しくマウントされたディレクトリで解凍(tmpファイルを含む)を実行します。次に、圧縮したらファイルを移動し、そのパーティションをアンマウントして、2GBファイルを「リサイクル」します。
影響を軽減し、zipbombが大きくなりすぎないようにする方法は複数あります(パーティションのサイズを超えることはできません)。