.htaccess の設定をせずに、php の関数として認証をかける方法のメモ。(ベーシック認証は、パスワードがそのままHTTPのネットワークを流れるので、盗聴などセキュリティ上の危険性がある。)
function basic_auth(){ $hashed_user = "m1kfDGkLDoDfI"; //別途 crypt 関数を使って作成しておく $hashed_password = "i/b3VZ7dsxl7Q"; //同上 if (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW'])){ if (crypt($_SERVER['PHP_AUTH_USER'], $hashed_user) == $hashed_user && crypt($_SERVER['PHP_AUTH_PW'], $hashed_password) == $hashed_password){ return; } } header('WWW-Authenticate: Basic realm="Restricted Area"'); header('HTTP/1.0 401 Unauthorized'); header('Content-type: text/html; charset='.mb_internal_encoding()); die("Authorization Failed."); }
add_action( 'login_init', 'basic_auth' ); function auth_login_init() { if ( ! is_user_logged_in() ) { basic_auth(); //前述の関数の呼び出し } }
セキュリティを高めるためにベーシック認証を使うので、WordPress のユーザー名とパスワードとは別のものを使用するほうがいいと思う。(平文でネット上に流れるため)
以下はプラグイン「WP Basic Auth」にあるコードで、これを前述の関数の変わりに使えば、WordPress のユーザー名とパスワードでログインできる。
function basic_auth(){ nocache_headers(); if ( is_user_logged_in() ) return; $usr = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : ''; $pwd = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : ''; if (empty($usr) && empty($pwd) && isset($_SERVER['HTTP_AUTHORIZATION'])) { list($type, $auth) = explode(' ', $_SERVER['HTTP_AUTHORIZATION']); if (strtolower($type) === 'basic') { list($usr, $pwd) = explode(':', base64_decode($auth)); } } if ( !is_wp_error(wp_authenticate($usr, $pwd)) ) return; header('WWW-Authenticate: Basic realm="Please Enter Your Password"'); header('HTTP/1.1 401 Unauthorized'); echo 'Authorization Required'; die(); }
関連ページ:「PHP で Basic 認証のパスワードを作る」
.htaccess を使ってベーシック認証を行うには「WP インストール時の注意点とセキュリティ」の「ログインにベーシック認証を使用」を参照。