unzip でパス トラバーサル保護を無効にする方法はありますか?

unzip でパス トラバーサル保護を無効にする方法はありますか?

作業ディレクトリより上の相対パスを持つファイルを解凍しようとすると (例../../foo)、次のメッセージが表示されます。

warning: skipped "../" path component(s) in ../../foo

inflating: foo

問題は、当社のソフトウェアがインストール中に相対パスでこれらの zip を作成し、インストールが失敗すると、すべてを元の状態に戻すためにそれらを解凍することです。ユーザーが通常のインストール ディレクトリの「上」にいくつかのデータ ファイルを保存することを選択した場合、バックアップにそのファイルが含まれます。これはまったく問題ないはずであり、要求に応じてアーカイブを信頼してファイルを元に戻すように unzip に指示する必要があります。残念ながら、パス コンポーネントを気にせず、アーカイブを作成されたとおりに解凍するように../datafile指示するオプションが見つかりません。これを行うための unzip オプションはありますか?unzip../

現時点では、zip の作成方法を変更することはできないため、「そのようにしないでください」という回答は受け入れられません。与えられた手段で対処するしかありません。ターゲット プラットフォームは RHEL 5 です。

答え1

これはあなたが求めていることを実現するはずです

unzip -: foo.zip

マニュアルページより

-: [Acorn、VM/CMS、MVS、Tandem 以外] では、アーカイブ メンバーを現在の '' 抽出ルート フォルダー '' 以外の場所に抽出できます。セキュリティ上の理由から、unzip は通常、抽出されたファイルの名前から '' 親ディレクトリ '' パス コンポーネント (''../'') を削除します。この安全機能 (バージョン 5.50 の新機能) により、unzip がアクティブな抽出フォルダー ツリー ヘッドの外側の '' 機密 '' 領域に誤ってファイルを書き込むことがなくなります。-: オプションを使用すると、unzip は以前のより自由な動作に戻り、現在の抽出フォルダーのレベルで ''../'' コンポーネントを使用して複数のディレクトリ ツリーを作成していた (古い) アーカイブを正確に抽出できます。このオプションでは、ルート ディレクトリ (''/'') への明示的な書き込みは有効になりません。これを実現するには、抽出対象フォルダーをルートに設定する必要があります (例: -d / )。ただし、-: オプションが指定されている場合、zip アーカイブ内で十分な ''../'' パス コンポーネントを指定することにより、ルート ディレクトリに暗黙的に書き込むことは可能です。このオプションは細心の注意を払って使用してください。

関連情報