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