> For the complete documentation index, see [llms.txt](https://coky-t.gitbook.io/owasp-asvs-ja/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://coky-t.gitbook.io/owasp-asvs-ja/owasp-apurikshonsekyuriti-50/0x14-v5-file-handling.md).

# V5: ファイル処理

## 管理目標

ファイルを使用すると、サービス拒否、認可されていないアクセス、ストレージ枯渇など、アプリケーションにさまざまなリスクをもたらす可能性があります。この章にはこれらのリスクに対処するための要件を含みます。

## V5.1 ファイル処理ドキュメント

このセクションは、関連するセキュリティチェックを開発および検証するために必要な事前条件として、アプリケーションに受け入れられるファイルに期待される特性を文書化する要件を含みます。

|     #     | 説明                                                                                                                                                                     | レベル |
| :-------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-: |
| **5.1.1** | ドキュメントでは各アップロード機能で許可されるファイルタイプ、想定されるファイル拡張子、最大サイズ (展開後のサイズを含む) を定義している。さらに、悪意のあるファイルが検出された場合にアプリケーションがどのように動作するかなど、ドキュメントにはエンドユーザがファイルをダウンロードして処理する際に安全を確保する方法を指定している。 |  2  |

## V5.2 ファイルアップロードとコンテンツ

ファイルアップロード機能は信頼できないファイルの主な発生源です。このセクションでは、これらのファイルの存在、量、内容がアプリケーションに悪影響を及ぼさないようにするための要件について説明します。

|     #     | 説明                                                                                                                                                                                                                                                                                                         | レベル |
| :-------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-: |
| **5.2.1** | アプリケーションはパフォーマンスの低下やサービス拒否攻撃を引き起こすことなく処理可能なサイズのファイルのみを受け付けている。                                                                                                                                                                                                                                             |  1  |
| **5.2.2** | アプリケーションはファイルを受け入れる際に、それ自体または zip ファイルなどのアーカイブ内のいずれかで、ファイル拡張子が予期されるファイル拡張子と一致するかどうかをチェックし、内容がその拡張子で表されるタイプに対応しているかどうかを検証している。これには最初の 'マジックバイト' のチェック、イメージの再書き込みの実行、ファイル内容のバリデーションのための専用ライブラリの使用が含まれるがこれに限定されない。L1 では、特定のビジネスまたはセキュリティ上の決定を行うために使用されるファイルのみに焦点を当てることができる。L2 以上では、受け入れられるすべてのファイルに適用する必要がある。 |  1  |
| **5.2.3** | アプリケーションが圧縮ファイル (zip, gz, docx, odt など) を展開する前に最大許容非圧縮サイズおよび最大ファイル数と照合している。                                                                                                                                                                                                                                |  2  |
| **5.2.4** | 一人のユーザがあまりにも多くのファイルや極端に大きいファイルでストレージを圧迫させることができないように、ユーザあたりのファイルサイズクォータと最大ファイル数が適用されている。                                                                                                                                                                                                                   |  3  |
| **5.2.5** | 特に必要な場合 (その場合、シンボリックリンクできるファイルの許可リストを適用する必要がある) を除き、アプリケーションはシンボリックリンクを含む圧縮ファイルのアップロードを許可していない。                                                                                                                                                                                                            |  3  |
| **5.2.6** | アプリケーションはピクセルフラッド攻撃を防ぐために、許容される最大値を超えるピクセルサイズのアップロードされた画像を拒否している。                                                                                                                                                                                                                                          |  3  |

## V5.3 ファイル保存

このセクションは、アップロード後にファイルが不適切に実行されるのを防ぎ、危険なコンテンツを検出し、信頼できないデータを使用してファイルが保存される場所を制御するのを防ぐための要件を含みます。

|     #     | 説明                                                                                                                                                                                                                                            | レベル |
| :-------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-: |
| **5.3.1** | 信頼できない入力によってアップロードまたは生成され、パブリックフォルダに保存されたファイルは、HTTP リクエストで直接アクセスした場合、サーバサイドのプログラムコードとして実行できない。                                                                                                                                                |  1  |
| **5.3.2** | アプリケーションがファイル操作のためにファイルパスを作成する際、ユーザが送信したファイル名の代わりに、内部で生成されたデータまたは信頼できるデータを使用する。また、ユーザが送信したファイル名やファイルメタデータを使用する必要がある場合は、厳密なバリデーションとサニタイゼーションを適用する必要がある。これは、パストラバーサル、ローカルまたはリモートファイルインクルージョン (LFI, RFI)、サーバサイドリクエストフォージェリ (SSRF) 攻撃から保護するためである。 |  1  |
| **5.3.3** | zip スリップなどの脆弱性を防ぐために、ファイル展開などのサーバサイドのファイル処理が、ユーザから提供されたパス情報を無視する。                                                                                                                                                                             |  3  |

## V5.4 ファイルダウンロード

このセクションは、パストラバーサルやインジェクション攻撃など、ダウンロードするファイルを提供する際のリスクを提供する際のリスクを緩和するための要件を含みます。また、これには危険なコンテンツを含まないことを確認することも含みます。

|     #     | 説明                                                                                                                  | レベル |
| :-------: | ------------------------------------------------------------------------------------------------------------------- | :-: |
| **5.4.1** | アプリケーションが JSON、JSONP、URL パラメータに含まれるユーザが送信したファイル名を確認または無視し、レスポンスの Content-Disposition ヘッダフィールドでファイル名を指定している。         |  2  |
| **5.4.2** | 提供されるファイル名 (HTTP レスポンスヘッダフィールドや電子メールの添付ファイルなど) は、ドキュメント構造を保持し、インジェクション攻撃を防ぐために、エンコードまたはサニタイズされている (RFC 6266 に従うなど)。 |  2  |
| **5.4.3** | 信頼できない場所から取得したファイルが、既知の悪意のあるコンテンツの配信を防ぐためにアンチウィルススキャナで検査されている。                                                      |  2  |

## 参考情報

詳しくは以下の情報を参照してください。

* [OWASP File Upload Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html)
* [Example of using symlinks for arbitrary file read](https://hackerone.com/reports/1439593)
* [Explanation of "Magic Bytes" from Wikipedia](https://en.wikipedia.org/wiki/List_of_file_signatures)
