.htaccessの設定に注意
PHPを動かしているApacheサーバでは、httpd.conf に下記のような設定が記述されているはずである。
ところが、ディレクトリ毎に設定している .htaccess ファイルの中に、
うっかりミスがないよう、.htaccess の設定には十分注意してほしい。
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 に下記のような設定を加えればよい。
現実解としては、PHPスクリプトがあるディレクトリのみ、.htaccess で上記の設定をしてやるといいだろう。
やり方は簡単だ。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の内容は下記の通りだ。
次に、AuthUserFileで指定するパスワードファイル .htaccess を用意する。
pahooというユーザー名でパスワードファイル .htaccess を作る場合は、htpasswd コマンド(apacheインストールディレクトリの配下にある)を使って、以下のように操作する。"********" はパスワードである。
重要なPHPファイルはBasic認証がかかったディレクトリに配置し、一般的なPHPスクリプトから関数 include や require で呼び出すようにすれば、漏洩リスクは減少する。
ここでは、多くのブラウザで対応しているBasic認証を用いることにする。
たとえば、"/var/public_html/cgi/" というディレクトリにBasic認証をかけたければ、そのディレクトリに .htaccess というテキストファイルを配置する。.htaccessの内容は下記の通りだ。
AuthType BasicAuthNameは、認証画面の領域というところに表示される内容で、日本語も利用できる。
AuthName "ログインIDとパスワードを入力してください。"
AuthUserFile /var/public_html/cgi/.htpasswd
require valid-user
次に、AuthUserFileで指定するパスワードファイル .htaccess を用意する。
pahooというユーザー名でパスワードファイル .htaccess を作る場合は、htpasswd コマンド(apacheインストールディレクトリの配下にある)を使って、以下のように操作する。"********" はパスワードである。
# /usr/local/apache2/bin/htpasswd -mc /var/public_html/cgi/.htpasswd pahooパスワードファイル .htaccess はテキストファイルだが、見てもらうと分かるように、パスワードは暗号化されており、.htaccessが盗み見されたとしても元のパスワードを知ることはできない。
New password: ********
Re-type password: ********
Adding password for user pahoo
参考サイト
- 「PHPセキュリティ対策」参考書籍の紹介:ぱふぅ家のホームページ
- セキュアプログラミング講座-Webアプリケーション編:IPA
(この項おわり)
今回は、Apacheの設定を中心に、PHPソースコードを漏らさないようにする方法を紹介する。