> 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-40/0x20-v12-files-resources.md).

# V12: ファイルとリソース

## 管理目標

検証対象のアプリケーションが以下の上位要件を満たすことを確認します。

* 信頼できないファイルデータはそれに応じてセキュアに処理する必要があります。
* 信頼できない情報源から取得した信頼できないファイルデータは Web ルートの外部に、かつ制限されたパーミッションで保存されています。

## V12.1 ファイルアップロード

zip 爆弾はペネトレーションテスト技法を使用して大いにテスト可能ですが、慎重な手動テストによる設計と開発への配慮を促し、サービス拒否状態となる自動ペネトレーションテストや未熟な手動ペネトレーションテストを避けるために、L2 以上とみなされています。

|      #     | 説明                                                                                       |  L1 |  L2 |  L3 | CWE |
| :--------: | ---------------------------------------------------------------------------------------- | :-: | :-: | :-: | :-: |
| **12.1.1** | アプリケーションはストレージをいっぱいにしたり、サービス拒否を引き起こす可能性のある大きなファイルを受け付けない。                                |  ✓  |  ✓  |  ✓  | 400 |
| **12.1.2** | アプリケーションが圧縮ファイル (zip, gz, docx, odt など) を展開する前に最大許容非圧縮サイズおよび最大ファイル数と照合している。              |     |  ✓  |  ✓  | 409 |
| **12.1.3** | 一人のユーザが非常に多くのファイルや極端に大きなファイルでストレージをいっぱいにすることができないように、ファイルサイズクォータとユーザあたりの最大ファイル数が適用されている。 |     |  ✓  |  ✓  | 770 |

## V12.2 ファイル整合性

|      #     | 説明                                                        |  L1 |  L2 |  L3 | CWE |
| :--------: | --------------------------------------------------------- | :-: | :-: | :-: | :-: |
| **12.2.1** | 信頼できない情報源から取得されたファイルはファイルのコンテンツに基づいて予想される種類であることを確認されている。 |     |  ✓  |  ✓  | 434 |

## V12.3 ファイル実行

|      #     | 説明                                                                                                                                                                                              |  L1 |  L2 |  L3 | CWE |
| :--------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-: | :-: | :-: | :-: |
| **12.3.1** | パストラバーサルから保護するために、ユーザが送信したファイル名メタデータがシステムやフレームワークファイルにより直接使用されていない、および URL API が使用されている。                                                                                                        |  ✓  |  ✓  |  ✓  |  22 |
| **12.3.2** | ローカルファイルの開示、作成、更新、削除 (LFI) を防ぐために、ユーザが送信したファイル名メタデータが確認または無視されている。                                                                                                                              |  ✓  |  ✓  |  ✓  |  73 |
| **12.3.3** | リモートファイルインクルージョン (Remote File Inclusion, RFI) やサーバサイドリクエストフォージェリ (Server-side Request Forgery, SSRF) によるリモートファイルの開示や実行を防ぐために、ユーザが送信したファイル名メタデータが確認または無視されている。                                   |  ✓  |  ✓  |  ✓  |  98 |
| **12.3.4** | JSON, JSONP, URL パラメータでユーザが送信したファイル名を確認または無視することにより、アプリケーションが反射型ファイルダウンロード (Reflective File Download, RFD) に対して保護している。レスポンスの Content-Type ヘッダは text/plain に設定し、Content-Disposition は固定ファイル名である。 |  ✓  |  ✓  |  ✓  | 641 |
| **12.3.5** | OS コマンドインジェクションから保護するために、信頼できないファイルメタデータがシステム API やライブラリで直接使用されていない。                                                                                                                            |  ✓  |  ✓  |  ✓  |  78 |
| **12.3.6** | 未検証のコンテンツ配信ネットワーク、JavaScript ライブラリ、node npm ライブラリ、サーバサイド DLL など、信頼できないソースからの機能がアプリケーションに含まれて実行されていない。                                                                                           |     |  ✓  |  ✓  | 829 |

## V12.4 ファイルストレージ

|      #     | 説明                                                                        |  L1 |  L2 |  L3 | CWE |
| :--------: | ------------------------------------------------------------------------- | :-: | :-: | :-: | :-: |
| **12.4.1** | 信頼できないソースから取得したファイルが、限られたパーミッションで、Web ルートの外側に保存されている。                     |  ✓  |  ✓  |  ✓  | 552 |
| **12.4.2** | 信頼できないソースから取得したファイルが、既知の悪意のあるコンテンツのアップロードと配信を防ぐためにウィルス対策スキャナによりスキャンされている。 |  ✓  |  ✓  |  ✓  | 509 |

## V12.5 ファイルダウンロード

|      #     | 説明                                                                                                                                                                               |  L1 |  L2 |  L3 | CWE |
| :--------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-: | :-: | :-: | :-: |
| **12.5.1** | 意図しない情報漏洩やソースコード漏洩を防ぐために、Web 層が特定のファイル拡張子を持つファイルのみを処理するように設定されている。例えば、バックアップファイル (.bak など) 、一時作業ファイル (.swp など) 、圧縮ファイル (.zip, .tar.gz など) やエディタで一般的に使用されるその他の拡張子は、必要でない限りブロックする。 |  ✓  |  ✓  |  ✓  | 552 |
| **12.5.2** | アップロードされたファイルへの直接のリクエストが HTML/JavaScript コンテンツとして決して実行されない。                                                                                                                      |  ✓  |  ✓  |  ✓  | 434 |

## V12.6 SSRF 保護

|      #     | 説明                                                                            |  L1 |  L2 |  L3 | CWE |
| :--------: | ----------------------------------------------------------------------------- | :-: | :-: | :-: | :-: |
| **12.6.1** | Web サーバまたはアプリケーションサーバが、サーバが要求を送信したりデータやファイルをロードしたりできるリソースやシステムの許可リストで構成されている。 |  ✓  |  ✓  |  ✓  | 918 |

## 参考情報

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

* [File Extension Handling for Sensitive Information](https://owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload)
* [Reflective file download by Oren Hafif](https://www.trustwave.com/Resources/SpiderLabs-Blog/Reflected-File-Download---A-New-Web-Attack-Vector/)
* [OWASP Third Party JavaScript Management Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Third_Party_Javascript_Management_Cheat_Sheet.html)
