【WordPress】ログインURLを変更して不正アクセスを防止する

WordPressのログインURLはデフォルトの形式が固定しているため、WordPressサイトだと見抜かれるとログインフォームへのアクセスを許してしまう。そこで、ログインURLをシークレットなURLへ変更し、セキュリティを高める対策をする。

WordPressのログインURLの形式

WordPressには次のようなログインURLが存在している。

  • https://test.com/admin
  • https://test.com/wp-admin
  • https://test.com/login
  • https://test.com/wp-login.php

これらのログインURLにアクセスされたら404を返し、別のページにログインフォームを設置する。

ログインURL変更方法

wp-contentと同階層に、test-login.phpを設置する。test-login.phpは新しいログインURLとなるので任意のファイル名を付与する。

test-login.phpに、以下を入力して保存する。このとき、secretkeyには、任意のテキストを入力する。

define('MY_LOGIN', password_hash('secretkey', PASSWORD_DEFAULT));
require_once './wp-login.php';

③ functions.phpに以下を入力して保存する。

2行目のtest-login.phpには①で作成したphpファイル名を、、6行目のsecretkeyには②で入力したテキストを指定する。


// 定数を定義
define('MY_LOGIN_PAGE', 'test-login.php');

// 新しいログインURL以外はトップページにリダイレクト
if (!function_exists('login_redirect_home_url')) {
  function login_redirect_home_url() {
    if (defined('MY_LOGIN') === false || password_verify('secretkey', MY_LOGIN === false)) {
      wp_safe_redirect(esc_url(home_url()));
      exit;
    }
  }
}
add_action('login_init', 'login_redirect_home_url');

// ログイン済み or 新しいログインURLは、「wp-login.php」のリンクを新しいログインURLに置換
if (!function_exists('login_replace_new_url')) {
  function login_replace_new_url($path, $scheme) {
    if (strpos($path, 'wp-login.php') && (is_user_logged_in() || strpos($_SERVER['REQUEST_URI'], MY_LOGIN_PAGE) !== false)) {
      $path = str_replace('wp-login.php', MY_LOGIN_PAGE, $path);
    }
    return $path;
  }
}
add_filter('site_url', 'login_replace_new_url', 10, 2);

④ ログインURLは、https://test.com/test-login.phpへ変更になる。

ログインURL変更後

初期ログインURLではログインフォームを呼びさせなくなった。

  • https://test.com/admin ➡ ホームへリダイレクト
  • https://test.com/wp-admin ➡ アクセスできない
  • https://test.com/login ➡ ホームへリダイレクト
  • https://test.com/wp-login.php ➡ ホームへリダイレクト

Related Tags