TOP書籍連動> データベースの認証
SQLインジェクション
SQLインジェクション

第3回:SQLインジェクションの注意点

著者:Ilia Alshanetsky   2006/1/31
1   2  3  次のページ
データベースの認証

   データベースを扱う時に考慮しなければならない最後の問題は、おそらくアプリケーションのデータベースに対する認証情報、つまりデータベースアクセスを許可するログイン情報やパスワードをどうやって保持するのか、ということではないでしょうか。ほとんどのアプリケーションではPHPの小さな設定スクリプトを使ってログイン名やパスワードを変数に割り当てています。

   このような設定ファイルが、サーバ利用者が自由にアクセスして読めるような状態になっていることが(専用ホストでないなら)よくあります。しかし誰にでも読めるということは、同じシステム上の誰でも、または悪質なスクリプトがそのファイルを読み、データベースログインに必要な情報を盗めてしまうということです。

   さらに悪いことに、多くのアプリケーションではこのファイルはウェブ上から閲覧可能なディレクトリに置かれており、.incのようなPHPファイルと認識されない拡張子が付けられていることがよくあります。.incは普通PHPスクリプトとしては解釈されないので、Webブラウザはファイルを誰もがその内容を見ることのできるプレーンテキストとして表示してしまいます。

   この問題解決に使われる方法の1つがウェブサーバの機能を使ったもので、Apacheの.htaccessのように特定のファイルへのアクセスを禁止する、というものです。例として、このディレクトリでは.incという文字で終わるすべてのファイルへのアクセスを禁止しています。($に注目してください)

<Files ~ ".inc$">
Order allow,deny
Deny from all
</Files>

   代わりに.incファイルをスクリプトとしてPHPのように扱ったり、あるいは単純に設定ファイルの拡張子を.phpにしたり、.inc.phpとしてそのファイルがインクルードファイルだとわかるようにする方法もあります。

   しかしファイルの名前を変えるのは必ずしも最善の方法ではありません。特に、設定ファイルにメインスコープ内の初期設定情報が多数含まれている場合は最善の方法とはいえません。最も理想的で単純な解決策はドキュメントルート以下に設定ファイルを置かないようにすることです。

   それでもまだローカルユーザに攻撃される脆弱性が残ります。効果がありそうな解決策の1つに、重要なデータを暗号化することが考えられます。データベース認証情報をコード形式で保持し、その秘密鍵を持つアプリケーションだけが情報をデコードできるようにするのです。

   しかし、暗号化をこのように使っても、情報を盗むことをほんの少し困難にするだけで、問題を解決するのではなく単にすり替えただけに過ぎません。認証情報をデコードするのに必要な秘密鍵はWebサーバで実行されるPHPスクリプトからアクセスできるようになっていなければならず、これはつまり、誰にでも読めるということなのです。これでは元の木阿弥ですね…。

   最適な解決策では、システムの他のユーザには証明情報を見る方法がない、ということが保障されていなければなりません。幸いにもApacheにはそのような機能が備わっています。Apacheがroot権限で実行されていれば、Apacheの設定ファイルであるhttpd.confで起動時に任意の中間設定ファイルをインクルードすることができます。

   rootはどんなファイルでも読めるので、重要な情報を記述してあるファイルをホームディレクトリに配置してモードを0600とします。こうすることで、あなたとスーパーユーザしかそのファイルを読み書きできないようになります。

<VirtualHost ilia.ws>
Include /home/ilia/sql.cnf
</VirtualHost>
1   2  3  次のページ

PHPプログラマーズマガジン 書籍紹介
PHPプログラマーズマガジン

PHPプログラマーズマガジンは、PDF形式で読者の方にお届けするPHP言語(PHP: Hypertext Processor)専門誌です。 カナダMTA出版のphp|architect誌を日本語に翻訳し、独自の記事を加えて月刊でお届けしています。

発行:アシアル株式会社 価格:1,029円

 ご購入はこちら
http://www.asial.co.jp/magazine/
Ilia Alshanetsky
著者プロフィール
Ilia Alshanetsky
PHP開発チームの活動メンバーの1人であり、現在のPHP 4.3.X.のリリースマネージャー。また、オープンソース掲示板FUDフォーラム(http://fud.prohost.org/forum/)をはじめとする数多くのプロジェクトにも貢献している。


INDEX
第3回:SQLインジェクションの注意点
  データベースの認証
  Includeを使う場合
  パフォーマンスの維持