【セキュリティ】WordPressのログイン画面URLを変更

WordPressで作られたサイトは、URLのお尻に特定の文字列を付け加えると、ログイン画面が表示されてしまいます。

ログインページのURLが知られてしまうだけで、そのサイトが書き換えられたり乗っ取られたりしてしまう可能性があります。ログインページのURLを変更してみましょう。

今までのログインページURLとは?

WordPressで作ったサイトのURLが

https://example.com

だとします。

このURLのお尻に、

  • https://example.com/wp-admin
  • https://example.com/wp-login
  • https://example.com/admin
  • https://example.com/login

などを付け加えて入力すると特にセキュリティについて気にしていないサイトなら、ログイン画面が表示されてしまいます。

これらのURLを入力してもログイン画面が表示されないようにしてみましょう!

ログインURLを変更するファイルを作成する

まずは、wp-adminページや、wp-loginページに変わる新たなURLを設定するために、
WordPressをアップロードしているフォルダに新たなファイルを作成します。

wp-config.phpや、wp-login.phpと同じ階層に推測しにくい名前のファイルを作成しましょう。
今回であれば「example-login.php」という名前のファイルを作成します。

今回、ログイン可能なURLは、

https://example.com/example-login.phpとなります。
例でのURLのため、本番時は○○-login.phpと好きなファイル名でかまいません。

作成したexample-login.phpファイルに記述

このPHP文をそのままexample-login.phpファイルへ貼り付けてください。

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

functions.phpファイルに追加記述

WordPressのテーマフォルダ内にfunctions.phpファイルがあるので、そのファイルに追記します。

define( 'LOGIN_PAGE', 'example-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() . '/404.php');
        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) !== false ) {
        $location = str_replace( 'wp-login.php', LOGIN_PAGE, $location);
    }
    return $location;
}

1行目の

define( 'LOGIN_PAGE', 'example-login.php');

example-login.phpの箇所は、先ほど自分で決めたファイル名と同じものにしてください。

5行目の

header('Location:' . site_url() . '/404.php');

で’/404.php’と指定をしており、今までの/wp-adminとか、/wp-loginでログインを試した場合、
404.phpのファイルにリダイレクトされて(飛ばされ)、直接ログインページへ飛ばされないようになりました。

もし、知識のある方でしたら、この/404.phpの部分のファイルを変更して、その指定ファイルに飛ばすようにしても大丈夫です。

ALL CATEGORY 全カテゴリー