Chapter 2. PHP3 の機能

Table of Contents
PHP による HTTP 認証
PHP による GIF の作成
ファイルアップロードのサポート
HTTP クッキーサポート
データベースサポート
正規表現
エラー処理
PHP ソースビュアー

PHP による HTTP 認証

PHP による HTTP 認証のフックは、Apache モジュールとして実行した時のみ 有効です。Apache モジュール PHP スクリプトにおいて、 Header() 関数を使用して "Authentication Required" メッセージをクライアントブラウザに送ることが可能です。 これにより、クライアントブラウザにユーザー名とパスワードを入力する ウインドウがポップアップ表示されます。 一度、ユーザーがユーザー名とパスワードを入力すると、 PHP スクリプトを含むその URL は、次回以降、 $PHP_AUTH_USER、$PHP_AUTH_PW、$PHP_AUTH_TYPE にそれぞれユーザー名、 パスワード、認証型を入力してコールされます。 現在、"Basic" 認証のみがサポートされています。

ページ上でクライアント認証を強制するスクリプトの例を 以下に示します。

Example 2-1. HTTP 認証の例

<?php
  if(!$PHP_AUTH_USER) {
    Header("WWW-authenticate: basic realm=\"My Realm\"");
    Header("HTTP/1.0 401 Unauthorized");
    echo "ユーザーがキャンセルボタンを押した場合に送られるテキスト\n"
    exit;
  } else {
    echo "こんにちは $PHP_AUTH_USER.<P>";
    echo "あなたは、パスワードとして $PHP_AUTH_PW を入力しました。<P>";
  }
?>

単に $PHP_AUTH_USER、$PHP_AUTH_PW を出力するのではなく、 ユーザー名とパスワードの有効性をチェックしたいと思うかもしれません。 その場合、クエリーをデータベースに送るか、ある dbm ファイル中の ユーザーを調べるといったことをすることになるでしょう。

バグのある Internet Explorer ブラウザには注意してください。 このブラウザは、ヘッダの順序に関してとてもうるさいようです。 今のところ、HTTP/1.0 401 ヘッダの前に WWW-authenticate ヘッダを送るのが 効果があるようです。

誰かが従来の外部機構による認証を行ってきたページのパスワードを暴く ようなスクリプトを書くことを防ぐために、特定のページに関して 外部認証が可能である場合、PHP_AUTH 変数はセットされません。

しかし、上記の機能も、認証を要求されない URL を管理する人が 同じサーバーにある認証を要する URL からパスワードを 盗むことを防ぐわけではありません。