2020年5月21日

【WordPress】プラグインなしでログインセキュリティを格段に高める方法

現在多くの企業がWordPressでウェブサイトを運営しています。ウェブサイトの制作は個人のプログラマや大手の制作会社に委託したり、自作したり様々だと思いますが、中にはWordPressの管理画面へのログインページのセキュリティがガバガバなことがあります。

今回はWordPressでのサイト運営者が簡単にできてセキュリティを格段に高めることができる方法を紹介します。

ログインページの脆弱性

まず、WordPressの初期設定ではなにが問題があるかを確認します。

初期設定でのログイン手順をおさらいします。ホームURLに/wp-adminと入力するか、/wp-login.phpと入力することでログインページにアクセスすることができますね。さらにログインページでIDとパスワードを入力することでログインをすることができます。

ここでIDはユーザネームになっているのでURLに「?author=1」とリクエストするとユーザネームがバレてしまうっというのは有名な話でパスワードを総当たり攻撃やパスワードリスト攻撃・類推攻撃をされるとログインが完了してしまいます。この対策として「author」リクエストをホームURLにリダイレクトする方法や、パスワードを複数回間違えたときロックする方法があります。

しかしもっと根本的にログインページにアクセスすることが簡単にできなくなれば良いわけです。ログインページを玄関のドアに例えるならば、マンションの自動ロックを導入する感覚です。

それでは実際にどのようにセキュリティを高めるかを見ていきましょう。

実装手順

今回紹介する方法はfunctions.phpに10行程度のコードを追加するだけの簡単な方法です。まずfunctions.phpの一番したの行に以下のコードを追加してください。

functions.phpをバックアップしてから追加してください。

add_action('wp_loaded','login_check_entrance');

function login_check_entrance(){
  if($_SERVER['PHP_SELF']=='/wp-login.php'){
    $passCode = 'hoge'; //  <-hogeを自分なりの文字列に変更してください
    $passID = 'pass'; //  <-任意で変更してください
    if(!isset($_GET[$passID]) && $_GET[$passID]!==$passCode){
      header("Location:".esc_url( home_url(/) ));
    }
  }
}

これだけで/wp-adminと入力しても、/wp-login.phpと入力してもログインページにアクセスすることができなくなります。

ログインページには、「https://{ホームURL}/wp-login.php?pass=hoge」とURLを入力するとアクセスすることができます。ここでコード内の「hoge」を自分好みの文字列に変更することで唯一のログインページリンクを作成することができ、ログインページへはこのリンクを介さないとアクセスできなくなります。

仮にリンクが流出してしまうとログインページに入ることができますが、さらにログインの必要があるのでセキュリティは格段に上がります。

まとめ

今回はプラグインなしでログインページへのアクセスを制限するコードを紹介しました。ログインページが丸出しでは見る人によってはサイトの価値を低く見られてしまうこともあります。セキュリティに意識してサイトを守るとともに自分の価値も高めていきましょう!

もしURLのパスワードを忘れてしまった場合はFTPからfunctions.phpにアクセスして「$passCode」変数を見つければ確認することができます。

コードの不具合や相談があればtwitterのDMにてご連絡ください。

コメントを書く

メールアドレスが公開されることはありません。