WordPressのカスタマイズ方法やプラグインレビューを中心に、パソコン/動物/植物のことなどを紹介するホームページです
[Wordpress] The easiest and most secure way to prevent unauthorized login to the site

【WordPress】プラグインなしで一番簡単かつ一番確実にサイトへの不正ログイン対策を行う方法

公開日:2019年3月25日 使い方など

WordPressは汎用のCMS(サイト管理ツール)ですので、ログイン画面や管理画面のURL構造は共通。「このサイトはWordpressで作られてる」ということが分かれば当然それらのURLも類推できますし、ユーザー名も何も対策していなければSEO対策の一環で設置する記事作者の一覧のURLから簡単に類推できてしまいますね。そうなると最後の砦はパスワードだけ・・になってしまいます。

大抵の場合はこの方法で不正ログインが試みられます。その対策として有名なのは

  1. 何かのコードを追加するなどしてログイン画面や管理画面のURLを変える方法
  2. セキュリティ系のプラグインで1のことを設定する方法

の2つ。でも・・・

変更したURLがもしも分からなくなったらどうしますか??もしも何かの不具合でプラグインが正常に動作しなくなったらどうしますか?自力で復旧できることを確認してそれらの方法を使っていますか??

プラグインなんだから不具合が出たら強制停止すればいい!とフォルダのリネームや削除をしてもセキュリティ系プラグインの場合には解決しないことが多いんです。そして一旦削除したら・・・復旧はより困難になります。

今回はそんな不安定な方法ではなく、より確実に設定でき、より簡単に設定でき、そしてより簡単に復旧できる方法を紹介します。

もちろん記事執筆時にはこのサイトでも使っている方法ですので、通常のログインURLや管理画面URLでアクセスしてみてください。

見事に

な画面が表示されたらこの方法は使えるのではないでしょうか?

※なおこの方法は不特定の場所からログインをするような性質のサイトには向きませんのであしからず

一番簡単かつ一番確実にサイトへの不正ログイン対策を行う方法

多分ちらっと書いた「不特定の場所・・・」という一文でピーンと来た方もいることでしょう。その方法は管理画面やログイン画面へのアクセスを制限するというものです。

つまり、管理画面やログイン画面へのアクセスは家、会社など特定の場所からのみに限定するのです。ですから不特定の場所からログインするというサイトでは使えないということになります。

この設定を行うのに必要な環境や設定

変更や万が一の場合の復旧に備え、この設定を行うためには、

  1. FTPクライアントでサーバー内のファイル操作ができる
  2. サーバーのファイル操作をするためのサーバーログイン情報が確実に保存されている

のうちのどちらか(両方が推奨)が必要になります。

最近のテーマにはこれから紹介する方法を管理画面から操作できるものもありますし、プラグインにもそうした機能を持つものがありますが、それらはWordpressのサイトへログインできたときはじめて操作できる機能ですから、万が一の時には全く役に立ちませんのでご注意ください。

不正ログイン対策で行うこと

具体的な不正ログイン対策を行う方法を紹介します。といってもこの項目が一番短いかも・・・。

  1. 前項の方法のいずれかでWordpressのインストールされている場所へアクセスします。
  2.   ※インストールされている場所とは「index.php」ファイルや「wp-content」フォルダのあるところを言います。

  3. 「.htaccess」というファイルを見つけ、パソコンへダウンロードします
  4. ダウンロードした「.htaccess」ファイルを開きます
  5.  ※メモ帳でも大丈夫かと思いますが、できればterapadなど無料のものでもいいのでテキストエディタを推奨します

  6. 一番先頭に以下のコードを追記します
  7. <FilesMatch "wp-login.php">
      Order deny, allow
      Deny from all
      Allow from xxx.xxx.xxx.xxx
    </FilesMatch>
    
    【注意】コードをコピーして使用する前に必ずお読みください

    この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

    使用については自己責任でお願いします

    コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

    万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

    コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

    コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

    その場合には以下の方法で修正を行ってみてください

    1. コードの中に全角の記号が入っていませんか?
    2. 半角にすることで解消できます
    3. コードの中に全角の空白(スペース)がありませんか?
    4. 半角にすることで解決できます
    5. コードは合っているはずなのに更新できないときは
    6. 特にエラーの出た行内に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があり、Wordpressのエディタチェックではこれを「'」や「)」など閉じ子のエラーとして認識され更新できないことがあります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。
    7. 「何かが間違っています...」と表示され、更新できないときは
    8. このエラーは本当に何がエラーなのかをWordpressのチェックが判断できない場合に発生します。解決策としてはその画面を開き直すことなのですが、その際希に元のコードがすべて削除されてしまう場合がありますので、今表示されているコードを一旦どこかへコピーしてからページの再読み込みをするようにしてやり直します。
      ※このエラーは不明なエラーなので予期せぬ動きをする可能性がありますので特に慎重な対処が必要です
    これらのエラー対処については以下のページが参考になるかも知れません

    コードを転載する場合には

    ご自身のサイトで当ページで紹介しているコードを転載される場合には当ページへのリンクを入れていただきますようお願いいたします

  8. コードの中のxxx.xxx.xxx.xxxの部分へ実際にアクセスするIPアドレスを入力します
  9. 今管理画面を開いている場所のIPアドレスを調べるには

    へアクセスします(すぐに表示されますのでその通りに入力してください)

  10. 「.htaccess」ファイルを保存します
  11. 元の場所へ上書きアップロードします

これで、今管理画面を開いている場所以外から管理画面やログイン画面へのアクセスができなくなります。

ね、とっても簡単です。

※管理画面を既に開いた状態でこの設定をし、その後サイトに何かを行う(投稿する、プラグインを追加するなどすべての操作)場合は、一旦ログアウトして再ログインしてからにしましょう(思わぬ不具合が出ることがあります)。

上のコードで500エラーが出るときは

サーバーの使っているソフトウェアによっては上記コードでエラーが出ることがあります。そんなときは

<Files wp-login.php>
order deny,allow
deny from all
allow from 自身のグローバルIP
</Files>

とすることできちんと動作するようになります。
理由としては「FilesMatch」が使えるものと「Files」で良いものがあるためです(詳細は省きます)

本当にログイン画面がアクセス拒否されるか?の確認方法

この方法を用いる場合は自宅や会社など普段アクセスする場所から設定することが多いですから、設定後、本当にアクセスできなくなってるの?と不安になりますよね?これを確認する方法は3つあります。

スマホなどからアクセスしてみる

Wifiをオフにして公衆回線(ていうのかな??)からアクセスするようにした上で、ログインページへアクセスしてみます。許可した拠点からのアクセスにはならないですから拒否されるはずです。

.htaccessファイルを編集する

先程設定した.htaccessファイルの追記内容。当然ながらアクセスできないと困るので自身のIPアドレスをxxx.xxx.xxx.xxxの部分に入れたと思います。

このIPアドレスを適当なもの(「1.1.1.1」でも大丈夫)にしてアクセスしてみれば、拒否されるかどうかの確認ができます。

外部からアクセスしてもらう

メールなどですぐに連絡をして試してもらうお友達などがいれば頼むのもありかと思いますが、少なくともログイン用のURLを教えるわけですからそれも避けたいところですね。

そこで、使えるのが外部からページがどう見えるのか?を試せるサービス。


本来は外部から接続してページのHTMLコードにエラーがないかをチェックするサービスなのですが、アクセスできなければ情報は表示されないという仕組みを利用します。

アクセスすると画像のようになりますので、ログインURLを入力して「チェック(Check)」をクリックします

アクセス拒否がきちんとできていれば

という画面が表示され、拒否されていないようであれば

が表示されます。もしもアクセス拒否したはずなのに下の図のように表示されたら、設定が誤っている可能性がありますので再度コードのチェックと上記サイトでのチェックを行ってください。

複数の拠点からアクセス可能にするには

複数の方が管理画面へアクセスするサイトでは当然複数の拠点からのアクセスを許可する必要があります。

そんな場合はコードの中の

  Allow from xxx.xxx.xxx.xxx
【注意】コードをコピーして使用する前に必ずお読みください

この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

使用については自己責任でお願いします

コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

その場合には以下の方法で修正を行ってみてください

  1. コードの中に全角の記号が入っていませんか?
  2. 半角にすることで解消できます
  3. コードの中に全角の空白(スペース)がありませんか?
  4. 半角にすることで解決できます
  5. コードは合っているはずなのに更新できないときは
  6. 特にエラーの出た行内に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があり、Wordpressのエディタチェックではこれを「'」や「)」など閉じ子のエラーとして認識され更新できないことがあります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。
  7. 「何かが間違っています...」と表示され、更新できないときは
  8. このエラーは本当に何がエラーなのかをWordpressのチェックが判断できない場合に発生します。解決策としてはその画面を開き直すことなのですが、その際希に元のコードがすべて削除されてしまう場合がありますので、今表示されているコードを一旦どこかへコピーしてからページの再読み込みをするようにしてやり直します。
    ※このエラーは不明なエラーなので予期せぬ動きをする可能性がありますので特に慎重な対処が必要です
これらのエラー対処については以下のページが参考になるかも知れません

コードを転載する場合には

ご自身のサイトで当ページで紹介しているコードを転載される場合には当ページへのリンクを入れていただきますようお願いいたします


の行を追加して、IPアドレスを入力すればいくつでも追加できます。

管理画面から簡単に変更できないの??

いちいちサーバーで操作するのが面倒、FTPなんて知らんし(この記事読む人にそんな人はいないと・・・願う)という方は


というプラグインを使って管理画面から.htaccessファイルの操作ができます。

ただし、

  • サーバー内で.htaccessファイルの編集ができない
  • FTPでファイルの送受信が許可されていない(FTPが使えない)

という環境でこの方法を用いて万が一失敗すると、修正することが基本的に不可能となりますので注意してください。

ログイン画面がアクセス拒否されたら・・・

これを知ってて設定するのと知らずに設定するのは雲泥の差となります。

が、設定した部分も1つですから復旧も簡単・・・ですよね??

前項の設定で「.htaccess」ファイルに追記した部分を削除して元の場所へアップロードすれば、何事もなかったかのように元の状態に戻ります。


たったこれだけ?のことで、簡単に自分やログインする人(場所)以外からログインされる、管理画面にアクセスされるのを防ぐことができます。

個人サイトはもちろん、企業サイトで社内以外から操作させないようにしたい場合(特に退職者などが勝手にログインして改ざんしたりしないようにしたい場合)などにはもってこいの方法です。

・・・とはいえ、サイトを作っていた担当者などが退職した場合にはFTPの接続情報やサーバーへの接続情報は漏洩していて間違いないと思いますので、それらのパスワードの変更もしっかり行って、操作できる口を減らす措置はきちんと講じましょう。

おまけ パスワード保護した投稿や固定ページでパスワード入力後に403エラーで内容が見えないときは

今回のセキュリティとは全く関係ない(逆に関係ある?)ことなのですが、今まで紹介した内容でwp-login.phpへのアクセスを制限すると、未ログインユーザーがパスワード付の投稿や固定ページでパスワードを入力してページを閲覧しようとすると、403エラーが出て内容が見えないという現象が発生します。

いろいろ調べてみたのですが公式コーデックにもこの件について触れたものはありませんでした。

そして、普段ログインしている(ログインできる)環境から見ることが多い自身のサイトでこの現象は非常に発見しにくく、誰かから「ページが見れない」と言われて初めて気づく(その時にも自分はそのIPからのアクセスが許可されているので現象が出ないこともある)こととなります。

私も知り合いのサイトでその現象が出たけどどうにかならないか?と聞かれてこの現象が起こることを初めて知った次第です。

まあ何が作用しているのかは不明ですが、パスワード入力後にWordpressのログイン処理の何かが関連してパスワードが解除されるのは確かなようですから、上の方法では権限なし(403エラー)が出てしまうようです。

これを防ぐには、「.htaccess」に書いた制限事項を削除し、新たに「wp-admin」フォルダ内に「.htaccess」ファイルを作って

Order deny, allow
  Deny from all
  Allow from xxx.xxx.xxx.xxx
</FilesMatch>
【注意】コードをコピーして使用する前に必ずお読みください

この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

使用については自己責任でお願いします

コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

その場合には以下の方法で修正を行ってみてください

  1. コードの中に全角の記号が入っていませんか?
  2. 半角にすることで解消できます
  3. コードの中に全角の空白(スペース)がありませんか?
  4. 半角にすることで解決できます
  5. コードは合っているはずなのに更新できないときは
  6. 特にエラーの出た行内に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があり、Wordpressのエディタチェックではこれを「'」や「)」など閉じ子のエラーとして認識され更新できないことがあります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。
  7. 「何かが間違っています...」と表示され、更新できないときは
  8. このエラーは本当に何がエラーなのかをWordpressのチェックが判断できない場合に発生します。解決策としてはその画面を開き直すことなのですが、その際希に元のコードがすべて削除されてしまう場合がありますので、今表示されているコードを一旦どこかへコピーしてからページの再読み込みをするようにしてやり直します。
    ※このエラーは不明なエラーなので予期せぬ動きをする可能性がありますので特に慎重な対処が必要です
これらのエラー対処については以下のページが参考になるかも知れません

コードを転載する場合には

ご自身のサイトで当ページで紹介しているコードを転載される場合には当ページへのリンクを入れていただきますようお願いいたします

  • コードの中のxxx.xxx.xxx.xxxの部分へ実際にアクセスするIPアドレスを入力します
  • を入れると解決できます。

    この方法ではログイン画面(wp-login.php)へのアクセスはできるけど、たとえ正しいユーザー名とパスワードを入れても許可されたIPアドレスでなければ管理画面へアクセスできないという処理になります。

    ・・・そういえばサーバーの中にはWAFの設定でIPアドレス制限をかけるものがあったような記憶があるのですが、これはどうやって回避したらいいんでしょうね・・・私の思いつく限りではWAFをOFFにしてこの方法にするしかないのか・・というのが結論です。

    おまけ2 サブディレクトリに入れたサイトは許可したい・・ときは

    メインのWordpressサイトのファイル・フォルダがある場所に別のフォルダ(サブディレクトリと言います)を作って、さらに別のWordpressをインストールする・・・同じドメイン内でサイトをがっちり分けて作る場合によく使われる手法です。

    この状況で、メインサイトの.htaccessに紹介したコードを入れると、サブディレクトリにもこの拒否設定が働き、指定したIP以外からはログインできないようになります。

    そもそもこうした構造にするのは、メインサイトは自分だけが使うけど、サブディレクトリのサイトは会員制にしたい、登録した人が投稿できるようにしたいという目的での構築シーンが多いと思います。それがアクセス拒否されてしまうとちょっと困りますよね?

    そこでサブディレクトリのサイトはアクセス拒否させないように、サブディレクトリにある.htaccessへ以下を追記します。

    <FilesMatch "wp-login.php">
      Order allow, deny
      allow from all
    </FilesMatch>

    これでメインサイトの.htaccessに記述した拒否設定がクリアされ、どこからのアクセスでも許可されるようになります。

    WordPressのカスタマイズ・不具合対応などご相談ください

    Wordpressのカスタマイズ、不具合解消のご相談はすべてココナラのダイレクトメッセージからお受けしております。まずはこちらのバナーからお気軽にお問い合わせください。

    【スポンサーリンク】