WordPressをインストールしてすぐの環境では、セキュリティ設定が甘い場合がよくあります。
特に管理画面への不正アクセスが簡単に出来てしまう状況は好ましくありません。
今回は、管理画面のセキュリティを高める上での有効な施策の一つ、ログインURLの変更方法についてご紹介いたします。
WordPress デフォルトのURL
WordPressデフォルトの管理画面のURLは下記のようになっています。
- http://サイトURL/wp-admin
- http://サイトURL/wp-login.php
サイトのURLの末尾に「/wp-admin」や「/wp-login.php」を付与すると、すぐに管理画面のログイン画面にアクセスできてしまうという致命的な欠陥があります。
ユーザ名パスワードがわからなければ、ログインされることはありませんが、そうは言っても総当り攻撃でパスワードを破られてしまうことがあります。
ログイン画面の変更方法
ログイン画面の変更を行うにあたっては、下記の3つの方法があります。
- プラグインの導入
- プラグインを用いず、ソースコードの編集
プラグインの導入
ログイン画面を変更してくれるプラグインは複数あるようです。
しかし、プラグインそのものにも脆弱性があり、完璧ではありません。WordPressのバージョンとの相性もあるので、一概にプラグインを入れておけば大丈夫と言うことではありません。
ソースコードの編集による変更
当ブログでは、ソースコードの変更による方法をご紹介していきます。
実装に当たっては、下記のサイトを参考にさせていただきました。
WordPressのログインURL変更方法!プラグインを使わない場合も解説 | ワードプレス初心者向け情報サイト『webcode』
ログイン用ファイルの作成
まず、一つ目に、wp-login.phpと同階層に任意のファイル名で下記のファイルを作成します。
wp-login.phpファイルは、WordPressをインストールしたルートディレクトリにあります。
実際にログインする際のログインURLの代わりとなるものなので、複雑なファイル名としておくのが良いでしょう。
例) hogehogehogehogehoge.php
<?php
define( 'LOGIN_CHANGE', sha1( '任意のキーワード' ) );
require_once './wp-login.php';
?>
任意のキーワードの部分は、それぞれ任意の文字列に置き換えてください。こちらも簡単に推測されないような複雑なものがおススメです。
functions.phpの編集
次にfunction.phpファイルの編集です。
functions.phpファイルは、現在利用しているテーマファイルの直下にあります。
/wp-content/themes/現在利用しているテーマ名/fucntions.php
既存コードの末尾に下記のコードを追加します。
既存コード
…
// WordPressの管理画面ログインURLを変更
define( 'LOGIN_CHANGE_PAGE', '任意のファイル名.php' );
add_action( 'login_init', 'login_change_init' );
add_filter( 'site_url', 'login_change_site_url', 10, 4 );
add_filter( 'wp_redirect', 'login_change_wp_redirect', 10, 2 );
// 指定以外のログインURLはTOPページに飛ばす
if ( ! function_exists( 'login_change_init' ) ) {
function login_change_init() {
if ( !defined( 'LOGIN_CHANGE' ) || sha1( '任意のキーワード' ) != LOGIN_CHANGE ) {
wp_redirect( home_url() );
exit;
}
}
}
// ログイン済みか新しく作ったログインURLの場合はwp-login.phpを置き換える
if ( ! function_exists( 'login_change_site_url' ) ) {
function login_change_site_url( $url, $path, $orig_scheme, $blog_id ) {
if ( $path == 'wp-login.php' &&
( is_user_logged_in() || strpos( $_SERVER['REQUEST_URI'], LOGIN_CHANGE_PAGE ) !== false ) )
$url = str_replace( 'wp-login.php', LOGIN_CHANGE_PAGE, $url );
return $url;
}
}
// ログアウト時のリダイレクト先の設定
if ( ! function_exists( 'login_change_wp_redirect' ) ) {
function login_change_wp_redirect( $location, $status ) {
if ( strpos( $_SERVER['REQUEST_URI'], LOGIN_CHANGE_PAGE ) !== false )
$location = str_replace( 'wp-login.php', LOGIN_CHANGE_PAGE, $location );
return $location;
}
}
変更が完了したのでログアウト後に、ファイルをアップロードし、動作確認します。
まずは、サイトURL/wp-admin/でアクセス
よし、アクセスできないので成功しました。
次に変更したURLでアクセスすると、見事にログイン完了!!
ということで、変更完了と思い、ログアウトしました。
…がしかし…
アクセス拒否…。トップ画面に戻ると、管理バーが表示されたままでログアウトできていない模様…。
ログアウトするときのURLは、
~wp-login.php?action=logout&_wpnonce=セッションID
となっています。ということは、アクセス拒否をしたwp-login.phpでログアウトしようとしているということ。これを新しく作成したログイン用ファイルに上書きしてあげる必要があります。
変更箇所は22~26行目です。
// WordPressの管理画面ログインURLを変更
define( 'LOGIN_CHANGE_PAGE', '任意のファイル名.php' );
add_action( 'login_init', 'login_change_init' );
add_filter( 'site_url', 'login_change_site_url', 10, 4 );
add_filter( 'wp_redirect', 'login_change_wp_redirect', 10, 2 );
// 指定以外のログインURLはTOPページに飛ばす
if ( ! function_exists( 'login_change_init' ) ) {
function login_change_init() {
if ( !defined( 'LOGIN_CHANGE' ) || sha1( '任意のキーワード' ) != LOGIN_CHANGE ) {
wp_redirect( home_url() );
exit;
}
}
}
// ログイン済みか新しく作ったログインURLの場合はwp-login.phpを置き換える
if ( ! function_exists( 'login_change_site_url' ) ) {
function login_change_site_url( $url, $path, $orig_scheme, $blog_id ) {
// ログイン画面、ログイン画面を用いた処理の画面名をリプレイス
if(($path === 'wp-login.php' || preg_match('/wp-login\.php\?action=\w+/', $path)) && (is_user_logged_in() || strpos($_SERVER['REQUEST_URI'], LOGIN_CHANGE_PAGE) !== false)) {
$url = str_replace('wp-login.php', LOGIN_CHANGE_PAGE, $url);
}
}
}
// ログアウト時のリダイレクト先の設定
if ( ! function_exists( 'login_change_wp_redirect' ) ) {
function login_change_wp_redirect( $location, $status ) {
if ( strpos( $_SERVER['REQUEST_URI'], LOGIN_CHANGE_PAGE ) !== false )
$location = str_replace( 'wp-login.php', LOGIN_CHANGE_PAGE, $location );
return $location;
}
}
これでOK。
まとめ
ログインURLを変更する方法はネット上にあふれていますが、情報を鵜呑みにしてコピペするだけでは痛い目にあいます。
一通り動作確認することと、改善点がないか考えるようにしましょう。