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

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

.htaccessの設定に注意

PHP を動かしている Apache サーバでは、httpd.conf に下記のような設定が記述されているはずである。

AddType   application/x-httpd-php   .php


この設定が有効であり、http通信でアクセスしてくるクライアントに対して、PHP ソースコードが見られることはない。

ところが、ディレクトリ毎に設定している .htaccess ファイルの中に、

AddType   application/octet-stream   .php


のように記述されていると、httpd.conf の設定がオーバーライド(上書き)され、.htaccess の設定が優先される。しかも、この設定は、拡張子 php のファイルをダウンロードできるようにするものだ。
うっかりミスがないよう、.htaccess の設定には十分注意してほしい。

拡張子PHPを偽装する

URL の最後の拡張子が "php" だと、その画面で PHP を実行しているということを告白しているようなものだ。そこで、拡張子を "html" に偽装することがある。中身は PHP ソースコードだが、拡張子は html にしておくのである。

やり方は簡単だ。httpd.conf に下記のような設定を加えればよい。

AddType   application/x-httpd-php   .php .html


ただし、この設定を行うと、通常の html ファイルも PHP として解釈されるので、応答速度が若干低下する(サーバーの負荷が増大する)。
現実解としては、PHP スクリプトがあるディレクトリのみ、.htaccess で上記の設定をしてやるといいだろう。

Basic認証をかける

Apache では、特定のディレクトリへアクセスする際にユーザー認証を求める方法として、Basic認証と Digest認証の 2種類の方式を備えている。
重要な PHP ファイルは Basic認証がかかったディレクトリに配置し、一般的な PHP スクリプトから関数  include  や  require  で呼び出すようにすれば、漏洩リスクは減少する。
ここでは、多くのブラウザで対応しているBasic認証を用いることにする。

たとえば、"/var/public_html/cgi/" というディレクトリに Basic認証をかけたければ、そのディレクトリに .htaccess というテキストファイルを配置する。.htaccess の内容は下記の通りだ。

AuthType Basic
AuthName "ログイン ID とパスワードを入力してください。"
AuthUserFile /var/public_html/cgi/.htpasswd
require valid-user


AuthName は、認証画面の領域というところに表示される内容で、日本語も利用できる。

次に、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 が盗み見されたとしても元のパスワードを知ることはできない。

参考サイト

(この項おわり)
header