学習忘備録

学習のアウトプットや感じた事を発信していきます

ファイルアクセスにまつわる問題

書籍を読んで

www.amazon.co.jp

こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。

ファイルアクセスにまつわる問題

Webアプリケーションは様々な形でファイルを使うが、そのファイルを取り扱う際に気をつけてなくてはいけない脆弱性がある

ディレクトリ・トラバーサル

外部からパラメータの形でサーバ上のファイル名を指定できるWebアプリケーションでは、ファイル名に対するチェックが不十分であるとアプリケーションの意図しないファイルに対して、閲覧や改ざん、削除が出来る場合がある

この脆弱性ディレクトリ・トラバーサルと呼ぶ

脆弱性が生まれる原因
  • ファイル名を外部から指定することができる
  • ファイル名として、絶対パス相対パスの形で異なるディレクトリを指定できる
  • 組み立てたファイル名に対するアクセスの可否をチェックしていない

「異なるディレクトリを指定することができる」ことに対する考慮が必要

上記の3条件を満たさないとディレクトリ・トラバーサル脆弱性にはならない

対策
  • 外部からファイル名を指定できる仕様を避ける
    • ファイル名を固定にする
    • ファイル名をセッション変数に保持する
    • ファイル名を直接指定するのではなく、番号などで間接的に指定する
  • ファイル名にディレクトリ名が含まれないようにする
    • ディレクトリを示す記号文字は、「/, \, :」などOSにより異なるので、OSによる違いを考慮したライブラリを用いるべき
  • ファイル名を英数字に限定する

最善策は、ファイル名を外部から指定しないこと

設計の段階で、外部からファイル名を渡さない仕様の検討が推奨

 

意図しないファイル公開

外部から閲覧されると困るファイルをWebサーバの公開ディレクトリに配置している場合、このファイルに対するURLが分かると秘密ファイルの閲覧が可能になってしまう

意図しないファイル公開による影響は

  • 重要情報の漏洩
脆弱性が生まれる原因

非公開のファイルを公開ディレクトリに置いた事で、意図しないファイル公開が起こる

  • 公開ディレクトリに置かれたファイルが外部から閲覧できる条件
    • ファイルが公開ディレクトリに置かれている
    • ファイルに対するURLを知る手段がある
    • ファイルに対するアクセス制限が掛かっていない
  • ファイルに対するURLを知る手段
    • ディレクトリ・リスティングが有効
    • ファイル名が日付やユーザ名、連番など類推可能
    • user.dat, data.txtなどのありがちな名前
    • エラーメッセージや、他の脆弱性によりファイルのパス名が分かる
    • 外部サイトからリンクされるなどして検索エンジンに登録される
対策

根本的対策は、非公開ファイルを公開ディレクトリに置かないこと

そのために、以下が推奨される

  • アプリケーションの設計時に、ファイルの安全な格納場所を決める
  • レンタルサーバを契約する場合は、非公開ディレクトリが利用出来ることを確認する
保険的対策

ディレクトリ・リスティングを無効にする