WordPress

WordPressのログインURLを変える方法

WordPressのログインセキュリティを上げたい

通常WordPressのログインURLは決まっていて、
https://example.com/wp-login.php
になっています。

昨今のWordPressバブルにより(?)、自分のサイトの管理画面を無関係の第三者に見られたり、ログイン画面に誰でもアクセスできることに不安感を抱く、とクライアントから言われたので、そのカスタム手順となります。

実際どれだけ第三者によるログイン未遂があるのかを確認したい場合、
プラグイン WP Security Audit Log を使用すると、わかりやすいかもしれません。WP Security Audit Logは、操作ログを記録しておくプラグインで、 ログイン成功、ログイン失敗などのログが確認できます。

ログイン失敗ユーザのおおよそはロボットだと思いますが、国内に制限していてもどれだけログイン画面にリーチしていているのかわかりやすいです。

管理画面にBasic認証をかたり、二段階認証にしたりと、セキュリティをあげる方法は様々あるのですが、できるだけパスワードが煩雑になってしまうのは避けたい。だったら、URLを任意の文字列に変えればよくない?ってことです。

変更手順

https://example.com/wp-login.php

https://example.com/let-me-login.php
に変更してみたいと思います。

ログインするページを作成

ページ名は任意 なのですが今回はlet-me-login.phpというページを作成します。ここで作成するページがログインURLに変更されますので、お好きなURL名に適宜変更してみてください。

PHPの中身は以下の通り。

<?php
define('LOGIN_KEY', password_hash( 'test', PASSWORD_BCRYPT, array('cost'=>10)));
require_once './wp-login.php';

その後、wp-login.phpと同じ場所にファイルを置いておきます。
Xサーバの簡単インストールを使われている場合は、
ドメイン名/public_html/let-me-login.php
に格納します。

function.phpに記載する

その後、以下の内容をfunction.phpに記載しましょう。

// change wp-login.php URL
define( 'LOGIN_PAGE', 'let-me-login.php');
add_action( 'login_init', 'admin_login_init');
function admin_login_init()
{
    if( !defined('LOGIN_KEY') || password_verify( 'test', LOGIN_KEY) === false ) {
        header('Location:' . site_url() . '/not-found');
        exit;
    }
}
add_filter( 'site_url', 'admin_login_site_url', 10, 4);
function admin_login_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_PAGE) !== false) ) {
        $url = str_replace( 'wp-login.php', LOGIN_PAGE, $url);
    }
    return $url;
}

add_filter( 'wp_redirect', 'admin_login_wp_redirect', 10, 2);
function admin_login_wp_redirect( $location, $status) {
    if( is_user_logged_in() && strpos( $_SERVER['REQUEST_URI'], LOGIN_PAGE) !== falsee ) {
        $location = str_replace( 'wp-login.php', LOGIN_PAGE, $location);
    }
    return $location;
}

既にログインしている状態の場合は、一度ログアウトしないといけませんが、もうwp-login.phpにアクセスしても404ページが開かれると思います。

今回は、let-me-login.phpという名前のログインURLに変更しましたが、任意で変更してみてくださいね。

それでは皆様、素敵なWordPressライフを。