9-1 インクルードファイルの扱い [PHPセキュリティー]
PHPセキュリティ
データファイルの流出
アプリケーションを作る際、多くのPHPファイルで読み込むような設定ファイルを作成する場合があると思います。例えばデータベースへアクセスする認証コードが記載されたファイルなどです。そのような設定ファイルをインクルードして共通の設定内容を読み込むことは便利ですし、メンテナンス性も向上します。ですが、誤った設定ファイルの扱いにより、その内容が外部に流出することがあります。結果としてブラウザに設定ファイルのソースコードが表示されてしまします。それは以下のような場合に頻繁に発生します。
POINT
- 設定ファイルの拡張子が .inc
- 設定ファイルをドキュメントルート内に設置
- apacheが.incファイルのリソース型を決められない
- apacheのリソース型としてDefaultTypeがtext/plainになっている
これらのことが重なった結果、設定ファイルがURL経由でアクセスされ、ソースコードがブラウザに表示されることになります。
設定ファイルはドキュメントルート以外に設置し、拡張子は.phpにしましょう。.incにする場合は、apacheに.incファイルをPHPとして処理させ、.incリソースへのアクセスを拒否させることでも回避できます。
POINT
- 設定ファイルはドキュメントルートの外に格納
- インクルードするファイルは.phpを使用する
- apacheに.incファイルをPHPとして処理させる
- apacheに.incリソースへのアクセスを拒否させる
1 2 3 4 | <Files ~\.inc$> Order allow,deny Deny from all </Files> |
バックドアURL
POINT
- バックドアURLとはURLから直接アクセスできてしまうこと
バックドアURLとは、悪意がない場合であっても、URLから直接アクセス出来てしまうリソースのことです。
例えば、アプリケーションは認証後にファイルをインクルードしてその内容を読み込むように意図していたとします。
1 2 3 4 5 6 7 8 9 10 | <?php //$authの初期値はFALSE $auth = FALSE; //認証 auth() が通った場合 $auth へ TRUE $auth = auth(); //$authの確認 TRUEの場合ファイルを読み込む if($auth){ include_once('./person.php'); } ?> |
person.phpがドキュメントルート内にある場合、auth() の認証を通らなくても、ブラウザのURLから直接アクセスできてしまいます。ドキュメントルート内にあるリソースはすべてブラウザで表示可能であると考えてください。公開されてはいけないファイルは必ずドキュメントルート以外に設置しましょう。
タグ(=記事関連ワード)
タグ: PHPセキュリティー
日付
投稿日:2017年8月6日
最終更新日:2017年08月09日
最終更新日:2017年08月09日
このカテゴリの他のページ
この記事へのコメント
トラックバックurl
https://wepicks.net/phpsecurity-incfiles/trackback/