WEB制作、マーケティングに関する情報をお届けします。ホームページ制作会社、テラのブログ

WordPressのフックを使用してBasic認証を導入する方法

タグ:

ホームページ制作でパスワードで保護されたページを作成したいというケースがあります。
簡易的なパスワード保護であればBasic認証がおすすめです。
Basic認証は強固なセキュリティではありませんが、手軽に導入することができるため一時的な処置として、もしくは重要度が低いが形式上パスワード認証を導入したい場合に活用することができます。
今回は、WordPressのフックを使用してBasic認証を導入する方法を紹介します。

コードの紹介

functions.phpの以下のコードを挿入してください。

// Basic認証を特定のページに導入する関数
function my_basic_auth() {
    // Basic認証を適用する投稿のIDを配列で指定
    $protected_slugs = array(
        '投稿ID',
        '投稿ID'
    );

    // Basic認証を行うかどうかを判断するための条件を設定
    $is_protected = false; //Basic認証にfalseを入れておく
    foreach ($protected_slugs as $slug) {
        if (is_page($slug) || is_singular($slug) || is_single($slug)) {//いずれかの条件に合致すれば処理
            $is_protected = true; //後の処理で認証を行うかどうかの分岐をさせるため、trueを入れる
            break; //配列の条件に合致したらループを抜ける
        }
    }

    // Basic認証を行う
    if ($is_protected) {
        $username = '任意のユーザー名';
        $password = '任意のパスワード';

        // 認証情報が送信されているか確認
       if (!isset($_SERVER['PHP_AUTH_USER']) || $_SERVER['PHP_AUTH_USER'] !== $username || $_SERVER['PHP_AUTH_PW'] !== $password) {
            header('WWW-Authenticate: Basic realm="Restricted Area"');
            header('HTTP/1.0 401 Unauthorized');
            echo '認証が必要です。';
            exit;
        }
    }
}
// WordPressのテンプレートが読み込まれる前にBasic認証を実行
add_action('template_redirect', 'my_basic_auth');

コードを解説

関数を作成

Basic認証を定義する関数を作成します。

function my_basic_auth() {}

配列に投稿IDを設定

$protected_slugs = array(
    '投稿ID',
    '投稿ID'
);

Basic認証を適用するかどうかの分岐

$is_protected = false;
foreach ($protected_slugs as $slug) {
    if (is_page($slug) || is_singular($slug) || is_single($slug)) {
        $is_protected = true;
        break;
    }
}

『$is_protected = false;』では、初期値としてfalseを入れておきます。
『foreach ($protected_slugs as $slug) {}』で配列をループさせます。
『if (is_page($slug) || is_singular($slug) || is_single($slug)) {}』で投稿IDと合致する条件を設定します。
『$is_protected = true;』で条件に一致した場合はtrueを入れます。後の処理でこの値によってBasic認証を行うかどうかを分岐させます。
『break;』は条件に一致した段階で処理を抜けます。

Basic認証を行う
if ($is_protected) {
    $username = '任意のユーザー名';
    $password = '任意のパスワード';

    // 認証情報が送信されているか確認
    if (!isset($_SERVER['PHP_AUTH_USER']) || $_SERVER['PHP_AUTH_USER'] !== $username || $_SERVER['PHP_AUTH_PW'] !== $password) {
        header('WWW-Authenticate: Basic realm="Restricted Area"');
        header('HTTP/1.0 401 Unauthorized');
        echo '認証が必要です。';
        exit;
    }
}

『if ($is_protected) {}』でBasic認証を行う場合にはtrueが入っています。
『$username = ‘任意のユーザー名’』、『$password = ‘任意のパスワード’』でそれぞれ設定します。
『if (!isset($_SERVER[‘PHP_AUTH_USER’]) || $_SERVER[‘PHP_AUTH_USER’] !== $username || $_SERVER[‘PHP_AUTH_PW’] !== $password) {}』では認証情報が送信されているかの確認と送信されている場合は一致しないければ処理を進めます。
『header(‘WWW-Authenticate: Basic realm=”My Realm”‘);』ではAuthorization BasicヘッダーにIDとパスワード設定しBasic認証の入力ウインドウをポップアップさせています。
『header(‘HTTP/1.0 401 Unauthorized’);』はページを表示する権限がないことをサーバーに送信しています。
『echo ‘認証が必要です。’;』エラー時に吐き出すコメントを設定。
『exit;』で処理を終了させます。

まとめ

以上、『WordPressのフックを使用してBasic認証を導入する方法』でした。
Bascic認証はセキュリティは弱いですが簡単にかけることができるため、開発環境などでは特に重宝します。
そのほか、見られて困るわけではないけど一般公開はできないといった重要度の低いものに関しては活用できることもあります。

テラ合同会社(東京都)

テラは2014年に東京都でスタートアップしたホームページ制作会社です。ホームページ制作以外にも広告運用、マーケティング、ブランディング、印刷物など幅広い領域をサポートしています。
コーポレートサイトはこちらをご覧ください。