PHPセキュリティ対策:ディレクトリやファイルのアクセス権限

(1/1)
機密性を確保するためには、業務プログラムのソースコードは見られないようにすべきである。ソースコードにパスワードなどの機密情報が含まれている場合もあるだろうし、セキュリティホールが残っていないとも言えないからだ。
今回は、Apache の設定を中心に、PHP ソースコードを漏らさないようにする方法を紹介する。

.htaccessの設定に注意

PHP を動かしている Apache サーバでは、httpd.conf に下記のような設定が記述されているはずである。
AddType   application/x-httpd-php   .php
この設定が有効であり、http通信でアクセスしてくるクライアントに対して、PHP ソースコードが見られることはない。
space
ところが、ディレクトリ毎に設定している .htaccess ファイルの中に、
AddType   application/octet-stream   .php
のように記述されていると、httpd.conf の設定がオーバーライド(上書き)され、.htaccess の設定が優先される。しかも、この設定は、拡張子 php のファイルをダウンロードできるようにするものだ。
うっかりミスがないよう、.htaccess の設定には十分注意してほしい。

拡張子PHPを偽装する

URL の最後の拡張子が "php" だと、その画面で PHP を実行しているということを告白しているようなものだ。そこで、拡張子を "html" に偽装することがある。中身は PHP ソースコードだが、拡張子は html にしておくのである。
space
やり方は簡単だ。httpd.conf に下記のような設定を加えればよい。
AddType   application/x-httpd-php   .php .html
ただし、この設定を行うと、通常の html ファイルも PHP として解釈されるので、応答速度が若干低下する(サーバーの負荷が増大する)。
現実解としては、PHP スクリプトがあるディレクトリのみ、.htaccess で上記の設定をしてやるといいだろう。

Basic認証をかける

Apache では、特定のディレクトリへアクセスする際にユーザー認証を求める方法として、Basic認証と Digest認証の 2種類の方式を備えている。
重要な PHP ファイルは Basic認証がかかったディレクトリに配置し、一般的な PHP スクリプトから関数  include  や  include  で呼び出すようにすれば、漏洩リスクは減少する。
ここでは、多くのブラウザで対応しているBasic認証を用いることにする。
space
たとえば、"/var/public_html/cgi/" というディレクトリに Basic認証をかけたければ、そのディレクトリに .htaccess というテキストファイルを配置する。.htaccess の内容は下記の通りだ。
AuthType Basic
AuthName "ログイン ID とパスワードを入力してください。"
AuthUserFile /var/public_html/cgi/.htpasswd
require valid-user
AuthName は、認証画面の領域というところに表示される内容で、日本語も利用できる。
space
次に、AuthUserFile で指定するパスワードファイル .htaccess を用意する。
pahoo というユーザー名でパスワードファイル .htaccess を作る場合は、htpasswd コマンド(apache インストールディレクトリの配下にある)を使って、以下のように操作する。"********" はパスワードである。
# /usr/local/apache2/bin/htpasswd  -mc  /var/public_html/cgi/.htpasswd  pahoo
New password: ********
Re-type password: ********
Adding password for user pahoo
パスワードファイル .htaccess はテキストファイルだが、見てもらうと分かるように、パスワードは暗号化されており、.htaccess が盗み見されたとしても元のパスワードを知ることはできない。

参考書籍

  • 入門PHP セキュリティ」(クリス・シフレット/桑村潤/オライリー・ジャパン/オーム社/2006 年 05 月/1,890 円)
  • PHP辞典第2版」(西沢直木/翔泳社/2008 年 02 月/2,520 円)
  • PHP の薬箱」(佐久嶋ひろみ/九天社/2006 年 11 月/2,940 円)

参考サイト

(この項おわり)
header