ワードプレスでログイン画面のurlを変更しよう

カテゴリー:WordPress

ワードプレスは利用者のすごく多いCMSです。そのためログインするためのURLなどが容易に推測されてしまい、不正にログインされる可能性が高くなってしまいます。

そこで、ログインページのURLを変更することがワードプレスのセキュリティーの向上の第一歩と考えて、プラグインなしでログイン画面のurlを変更しよう思い変更!!

色々なサイトでもログインのURL変更方法を紹介していますが今回は、ワードプレスのログインページのURLを変更して、パスワードをパスワードをお忘れですか?の機能も動くようにするところまでを備忘記録として残します。

ログイン画面のURLとなる元ファイルを作成

ますは適当なファイル名で新規phpファイルを作成。今回は、wp-login.phpのある階層に名前をlogin-filename.phpを新規作成したことにします。

・login-filename.php
<?php
define('LOGIN_CHANGE_PAGE', sha1('favorite_words'));
require_once './wp-login.php';
?>

defineで定数名LOGIN_CHANGE_PAGE、値をsha1(‘favorite_words’)で定義。favorite_wordsには好きな英数字記号を入力、ハッシュ関数のsha1でハッシュ化しています。require_onceで./wp-login.phpを読み込み。

一旦login-filename.phpの編集は完了です。

ログイン画面のurlを変更のためfunctions.phpを編集

ここからはfunctions.phpを編集していきます。

・functions.php
define('LOGIN_CHANGE_FILE', 'login-filename.php');

defineで定数名LOGIN_CHANGE_FILE、値をlogin-filename.phpで定義。

・functions.php
function le_login_change_page_init()
    {
        if (!defined('LOGIN_CHANGE_PAGE') || sha1('favorite_words') != LOGIN_CHANGE_PAGE) {
            global $wp_query;
            $wp_query->set_404();
            status_header(404);
            nocache_headers();
            get_template_part(404);
            exit;
        }
    }
add_action('login_init', 'le_login_change_page_init');

login_initに関数login_change_initをフック、LOGIN_CHANGEが未定義か指定した値と異なる時に404ページへ遷移。

・functions.php
function le_login_change_page_site_url($url, $path, $orig_scheme, $blog_id)
  {
    if ($path == 'wp-login.php' && (is_user_logged_in() || strpos($_SERVER['REQUEST_URI'], LOGIN_CHANGE_FILE) !== false)) {
      $url = str_replace('wp-login.php', LOGIN_CHANGE_FILE, $url);
          return $url;
        } else {
          return $url;
        }
  }
add_filter('site_url', 'le_login_change_page_site_url', 10, 2);

$pathがwp-login.phpで、ログイン済みまたはLOGIN_CHANGE_FILEの値がURLに含まれている場合に、$urlをwp-login.phpからLOGIN_CHANGE_FILEへ置き換える。

・functions.phpを編集
function le_login_change_page_wp_redirect($location, $status)
  {
    if (strpos($_SERVER['REQUEST_URI'], LOGIN_CHANGE_FILE) !== false){
      $location = str_replace('wp-login.php', LOGIN_CHANGE_FILE, $location);
      return $location;
     } else {
      return $location;
     }
   }
add_filter('wp_redirect', 'le_login_change_page_wp_redirect', 10, 2);

wp_redirectのフィルターでログアウト時のURLを変更。

ここまででログインページは指定したURLへ変更ができます。

ワードプレスでパスワードがわからなくなった

いきなりですが、ブログって毎日更新するのって大変ですよね?ブログの更新を私も2日くらい間を開けてしまったのですが…ワードプレスにログインしようといつものようにパスワードを入力…パスワードが違うのかログインができなくなってしまったのです…

そこで、パスワードをお忘れですか?をクリックして進めて行ったら上記のログインページのURLを置き換えることで、パスワードをお忘れですか?の機能が動作しなくなっていました。

色々考えてみたのですが、簡単に対応するにはformのaction属性の値をjQueryを使用して変更することで、対応が可能だと思い実行しました。

・login-filename.phpを編集
<?php
define('LOGIN_CHANGE_PAGE', sha1('favorite_words'));
require_once './wp-login.php';
?>
<?php if (strpos($_SERVER['REQUEST_URI'], 'lostpassword') !== false) : ?>
  <script>
    jQuery(function () {
      jQuery('#lostpasswordform').attr('action', location.href);
    })
  </script>
<?php endif; ?>

上記のlogin-filename.phpにを追加して、login関連の時にjQueryを読み込むだけです。wp-login.phpの中身を確認すると該当箇所のHTMLが記述されている箇所があります。

・functions.phpを編集
function le_login_enqueue_script(){
     wp_enqueue_script('jquery');
}
add_action('login_enqueue_scripts','le_login_enqueue_script')

login関連の時にjQueryを読み込み。

これで、ワードプレスでログイン画面のURLを変更して、パスワードをお忘れですか?の機能も無事に機能するようになりました。


タグ

関連する投稿

ドラクエ好きな社会保険労務士有資格者・ファイナンシャルプランナー技能士検定2級正会員が運営をしています。当ブログではDQMSLを中心にWordPress・HTML・CSS・JS・PHPなどのTips備忘記録や資格関連の情報、その他雑記を発信して行きます。