ファイルアクセスにまつわる問題
書籍を読んで
こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。
ファイルアクセスにまつわる問題
Webアプリケーションは様々な形でファイルを使うが、そのファイルを取り扱う際に気をつけてなくてはいけない脆弱性がある
ディレクトリ・トラバーサル
外部からパラメータの形でサーバ上のファイル名を指定できるWebアプリケーションでは、ファイル名に対するチェックが不十分であるとアプリケーションの意図しないファイルに対して、閲覧や改ざん、削除が出来る場合がある
脆弱性が生まれる原因
「異なるディレクトリを指定することができる」ことに対する考慮が必要
上記の3条件を満たさないとディレクトリ・トラバーサル脆弱性にはならない
対策
- 外部からファイル名を指定できる仕様を避ける
- ファイル名を固定にする
- ファイル名をセッション変数に保持する
- ファイル名を直接指定するのではなく、番号などで間接的に指定する
- ファイル名にディレクトリ名が含まれないようにする
- ディレクトリを示す記号文字は、「/, \, :」などOSにより異なるので、OSによる違いを考慮したライブラリを用いるべき
- ファイル名を英数字に限定する
最善策は、ファイル名を外部から指定しないこと
設計の段階で、外部からファイル名を渡さない仕様の検討が推奨
意図しないファイル公開
外部から閲覧されると困るファイルをWebサーバの公開ディレクトリに配置している場合、このファイルに対するURLが分かると秘密ファイルの閲覧が可能になってしまう
意図しないファイル公開による影響は
- 重要情報の漏洩
脆弱性が生まれる原因
非公開のファイルを公開ディレクトリに置いた事で、意図しないファイル公開が起こる
- 公開ディレクトリに置かれたファイルが外部から閲覧できる条件
- ファイルが公開ディレクトリに置かれている
- ファイルに対するURLを知る手段がある
- ファイルに対するアクセス制限が掛かっていない
- ファイルに対するURLを知る手段
対策
根本的対策は、非公開ファイルを公開ディレクトリに置かないこと
そのために、以下が推奨される
保険的対策
ディレクトリ・リスティングを無効にする