WordPressのカスタマイズ方法やプラグインレビューを中心に、パソコン/動物/植物のことなどを紹介するホームページです

今からでも遅くない!WordPressサイトのセキュリティ対策いろいろ(2019年まとめ)

公開日:2019(令和元)年9月6日/最終更新日:

Knowledge Base 制限



【景品表示法に基づく表記】ページ内のコンテンツには、商品プロモーションが含まれています

WordPressはブログサービスと比べて自由度が高く、ブログ記事のみでないいろいろなコンテンツの作成ができるのが最大の魅力。でもいろいろできるようになっているのはWordPressが無料で使えるホームページ作成ツールだからです。

誰でも使えるサイト作成ツールなのですからプログラムはみんな一緒、仕組みもみんな一緒。だから、不正ログインされてサイトを乗っ取られたり、悪質なコード(ウィルスやマルウェアなど)を仕込まれてサイトを壊されたり、スパムサイトとして検索エンジンから無視されてしまったりするような攻撃を受けることがあります。

一旦その状態になってしまうと大変なことになりますので、転ばぬ先の杖、私が2019年現在でおすすめするWordPressサイトのセキュリティ対策を紹介していきたいと思います。

プラグインを使った方が無難なものについては紹介ページへのリンクを入れますが、それ以外はこのページで完結できるようにザザーーっと書いていきますので、1つ1つご自身のサイトに必要かどうかも含めてブックマークに登録するなどしてゆっくりと読んでいただければと思います。

ちなみにこのページには10,000文字以上の内容があります

セキュリティ対策は今のサイトのためのみだけでない?

余談になってしまいますが、「別にサイトがダメになっても最悪再インストールすればいい」とお考えの方もいらっしゃるかも・・・。

実はそのサイトが侵されるという問題だけではないんです。前の文章で少し触れましたが、何か悪質な行為を行う可能性があると判断されたドメインは、検索エンジンの検索対象(インデックス)から排除され、検索経由のアクセスが激減(実質はゼロ)になったり、広告などを掲載している場合はそのサービスからスパム行為をしているサイトと判断されてアカウントが凍結されるなどの影響が出る場合があります。

特に後者についてはドメイン云々ではなくその人のアカウント自体に影響することが多いですから、複数サイトを持っている場合などは侵されたドメイン以外にも影響が出ることがあります。

こうしたことからセキュリティ対策はできる限り行った方が良いのです。やっておいて損はないのですから是非対策を施しましょう。

不正ログインさせないためのWordPressセキュリティ

ほとんどの場合、管理画面へ不正にログインされるところから改ざんなどの被害を受けますから、まずはそこをしっかり対策しましょう。

自分がサイトを操作する場所以外からのログインを禁止する

この機能がサーバーで設定されている場合もあります(私が知るところでは確かロリポップは標準だったかと思います)から、まずはご自身の利用されているサーバーがどうなっているのかを確認してください。
※サーバーに機能があって一見制限されているように見えても、特に1つの契約で複数のサイトを運営している場合などでは実際は機能していないということがありますので、別の場所からログイン画面を表示してみるなどのテストは行った方がよいでしょう。

テストして「あれ?ログインできちゃうんだけど・・」という場合や、初めからこの機能がない場合には以下の方法でWordPressサイトのログイン画面にアクセス制限をかけることができます。

これを設定するにはまず自身のアクセス元IPアドレスを調べる必要があります。「自分 IP 調べる」などで検索すればいろいろと方法が出てきますので、どこでもいいですから自身のグローバルIPを調べましょう。

またこの設定を行うためにはWordPressサイトのindex.phpがある場所に存在する「.htaccess」ファイルにコードの追加をする必要がありますので、以下のような環境が必要です

  • サーバーの管理画面に「.htaccessファイルの編集」というようなメニューがある
  • サーバーの「ファイルマネージャー」機能に直接ファイルの編集ができるような機能がある
  • サイトの場所へパソコン用のツールからアクセスできるFTP接続の設定がある

上記の環境がない、またはあるのかないのかも分からないという方は万が一の場合修復できないですからこの処置は避けた方がいいでしょう。

※サーバーによっては「.htaccess」ファイルの編集をFTPでできないようにしている場合もありますので、どの方法で編集できるのかはサーバーのマニュアルなどで確認ください。

今回はFTPクライアントをパソコンにインストールし、接続情報を使って編集する方法として紹介します。

手順は以下の通りです

該当のWordPressサイトがインストールされている場所(「wp-admin」フォルダや「index.php」がある場所)にある「.htaccess」ファイルをパソコンへダウンロードします

メモ帳などで「.htaccess」ファイルを開き、先頭に以下のコードを追加して保存します

<FilesMatch "wp-login.php">
Order deny, allow
Deny from all
Allow from 自身のグローバルIP
</FilesMatch>

※自身のグローバルIPとなっている場所は先ほど調べたIPアドレスを入力してください
※複数の拠点からのアクセスを許可する場合には

Allow from 自身のグローバルIP

の行を必要分だけ追加して、IPアドレスを指定してください

元の場所へアップロードします

これで許可したグローバルIPアドレスからのみログイン画面へのアクセスが可能になります。

サーバーによっては500エラーが出ることがあります

上のコードでは403(アクセス拒否)ではなく、500エラーがでることがあります。そんなときは

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

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

別のIPアドレスからアクセスできていないことを確認する環境がないという方は、上の作業でアクセスできることを確認した上で、あえて今接続しているグローバルIPアドレスと違ったものへ「.htaccess」の内容を変更してアップロードし、ログイン画面へアクセスしてみてください。「403 このページにアクセスする権限がありません」などと表示されログイン画面が表示されなければ設定はきちんとされているということになりますから、再び自身のグローバルIPを許可するように「.htaccess」ファイルを編集してアップロードし直してください。

え?たったこれだけ?と思われるかも知れませんが、恐らくこれがログインに対して防御する単純かつ一番確実な方法になります。ただし、どこか外出先で記事を書こう!と思ってもログインできませんのでその点は我慢するしかないでしょう。

企業サイトでもこの方法は有効だと思います

またまた脱線しますがこの方法は個人サイトで有効というわけではありません。例えば会社の拠点やその店舗以外からアクセスできないというような環境もこの設定で簡単に制限できます。そうすることで、例えば退職者などが勝手にログインして編集してしまうというような心配がなくなります。

ここから下の項目は、ログインできるIPアドレスを制限することでまず必要なくなる対策になりますが、万が一に備え、一緒に設定しておいた方がいい項目です。逆にいろいろな拠点からログインして作業する場合はIPアドレスの制限が難しいので、下の設定はマストになります。

サイト管理者のユーザー名が分からないようにする

「作者」欄には「ニックネーム」が表示されているから分からないでしょと思った方、甘~~い!!です(笑)。試しにその作者リンク(多分多くのテーマでは記事の末尾に表示されているかと思いますが・・・)をクリックして、作者の記事一覧を表示してみてください。

そして見るべきはページではなくアドレスバー。・・・よく見るとユーザー名と同じものがバシッと表示されてしまっているのに気づきませんか??WordPressの基本プログラムではつまりこのようにURLを表示するようになっているんです。

これを見て不正ログインしようとするのは昔の話・・と思われるかも知れませんがそんなことは全くありません。

ちなみに私はここで紹介する方法で作者一覧のURLの中でユーザー名として表示される内容を変えています(ログイン画面は前の設定でアクセスできなくなっていますので「ここを見て!」と言えないのが残念です)。そしてログイン画面へのアクセスを制限する前はこの文字列をユーザー名としたログインエラーの多いこと多いこと(笑)。古典的と思えるユーザー名の類推はいまでもきっちりと行われているようです。

どこの人がどんなユーザー名やパスワードでログインしようとしているのかを知りたい方は前項のアクセス制限を解き、この方法を実装した上でログイン履歴を調べるプラグインを追加してみてください。結構面白い結果が得られますよ(笑)。

まずはこのユーザー名になっているところを任意の文字列にするプラグインを1つ紹介しておきます

です。詳しい説明はリンク先の記事をご覧ください。

そして前述したログイン&ログイン失敗のログを見るためのプラグインは

になります。いつ、どこの人がどのユーザー名、どのパスワードでログイン(ログイン失敗)したかが一覧で表示できるようになります。

また、内部リンクを増やしてSEOに優位となる施策などとして、各ページの文末などへタグや作者一覧へのリンクが表示されるテーマが多いですが、これ自体がSEOに果たして効果があるのか?というのが私としては甚だ疑問なので、このサイトで使っているHABONEテーマではもともと出力しない仕様にしています。

もしもお使いのテーマで作者の書いた記事の一覧リンクが必要ないということであれば、「page.php」や「single.php」など個別の固定ページや投稿を出力しているファイルの中で

<?php the_author_posts_link(); ?>

という記述を見つけて削除すれば表示されなくなります(前後がデザイン要素などで囲まれていることが多いのでそれらも不要ですからまとめて削除するといいかと思います)。

 ちょっと脱線しますけど、何かを非表示にする場合にCSSで単純に「.class名{display:none;}」で処理される方が多いかもしれませんが、これは出力されているものをデザインとして見えなくするという処置になり、完全に出力されないということではありませんし、これが検索エンジンでどう判断されているかは分かりませんが、「表示すべきコードがあるのにCSSで非表示にしている箇所がたくさんあるページ」としてマイナス評価を受ける可能性がないとは言えませんので、今回の作者一覧リンクも含め出力しないものは出力しないようにされた方がいいと思います。

「REST API」を無効にしてユーザー名を取得できなくする

ちょっと難しい話になりますのでまずは

サイトのURL/wp-json/wp/v2/users

※サイトのURLは、ご自身のサイトのURL。例えばこのサイトなら「https://www.momosiri.info」です。
をブラウザのアドレスバーに入力して表示させてみてください。

今からでも遅くない!WordPressサイトのセキュリティ対策いろいろ(2019年まとめ)|Knowledge Base

どうですか??

こんな画面が表示されませんか??のり弁状態の部分にはユーザー名やサイトのURLがばっちり表示されてしまっています。これでは具合が悪いので、表示させないようにします。この記事では「REST API」についての説明は省きますが、表示させない方法は以下のリンク先で詳しく紹介されていますので確認してみてください。

WordPressのREST APIを無効化しつつ特定プラグインは動作するようにカスタマイズする方法

※リンク先ページでは「Gutenberg」エディタをプラグインで使用する時代のものとして紹介されていますので、WordPress5.0以降ではエディタが機能しなくなることがありますので、その際には「Gutenberg」プラグインを追加することで解消されると思います。

この方法を使って再度

サイトのURL/wp-json/wp/v2/users

を表示させてみてください。以下のように何も出てこないようになります。

今からでも遅くない!WordPressサイトのセキュリティ対策いろいろ(2019年まとめ)|Knowledge Base

共通のメアドは使わない!メアドを使ったログインを無効にする

サーバーへのログイン時には大抵メールアドレスとパスワードを使います。そもそもサーバーへログインできてしまえば何でもできてしまうので、

  • サーバーへログインするためのメールアドレス
  • WordPressサイトのメールアドレス
  • WordPressサイトの管理ユーザーのメールアドレス

は別にすべきです。いうまでもありませんが、ログインするためのパスワードも別にすべきです。

なぜ別にするかというと、例えばサイトのメアドと管理ユーザーのメアドが同じ場合、コメントの返信やコンタクトフォームの返信などを行った際、知らず知らずのうちにメールアドレスを晒すことになり、これを基に不正アクセスされる可能性があるからです。また、コンタクトフォームなどのプラグインではプラグインによってサイトのメールアドレスが最初にセットされるもの、管理ユーザーのメールアドレスが初期設定でセットされるものがありますので、そうしたプラグインを使用する際はよくテストしてから実装するようにしましょう。

さて、こうして気を付けていてもついうっかり・・・というのはあるものです。そこで万が一に備えてメールアドレスのログインを無効にしておけば安心です。

これを実現するプラグインもありますが、テーマのfunctions.phpへ簡単なコードを追加するだけで済みますので、もうテーマを変更することがないという完成度であれば以下のコードを使用しましょう。

/******** ログインでメールアドレスの使用を禁止 ********/
remove_filter( 'authenticate', 'wp_authenticate_email_password', 20 );

テーマのfunctions.phpへ追加して保存したら一度ログアウトしてメールアドレスでのログインができないようになっているか確認しましょう。

「admin」というユーザー名は使わない

今更書かんでも・・という位有名で必須の対策なので使っている人やそれを使ってログインを試みる人なんていないだろうと思っていましたが、どうやらそうでもなさそうです。

前項のログイン履歴を取るプラグインで、作者一覧のURLから類推されたユーザー名の次に不正ログインを試みたユーザー名がこの「admin」なんです。

そして知り合いのサイトのカスタマイズを頼まれて「ユーザー名」と「パスワード」教えて!と言って返ってきたのが「admin」というユーザー名。まだこのユーザー名使うやつおったんかい!!と思わず独り言言っちゃいました(笑)。

今でもadminというユーザー名を使っている方、変更したいんだけど変えれないという方もいらっしゃるのでは??原因は今ログインしているのが「admin」というユーザーだからです。管理者権限を持つユーザーを別に作り、そのユーザーでログインしてから「admin」ユーザーを削除してみてください。うまく行きましたよね??もちろん「admin」ユーザーを削除できるのは別の管理者権限を持つユーザーだけですので、管理者権限を持つユーザーがいなくなっちゃうのでは?という心配はありませんし、万が一、万が一(あり得ませんけど)そんなことになったときは、ちょっと裏技を使えば権限の変更は可能ですので即座に「admin」ユーザーをなくすようにしてください。

「姓」「名」「ニックネーム」を設定する

テーマやプラグインが吐き出すユーザーの情報は

  • ページごとに表示される「作者」の記事一覧へのリンクや、掲示板コンテンツなどへの表示
  • SNSなどへ埋め込む際に使用される要素を出力するOGPタグ
  • 検索エンジンが参考にするデータSchema.orgタグ

などがあります。ページの表示で目に見えるのは実は最初の場合だけ。後の2つは目に見えて表示されません。

テーマやプラグインによって、この要素に「ユーザー名そのもの」「姓」「名」「ニックネーム」のどれを使うのかは様々で、よほど悪質な?ものでなければ「ニックネーム」→「名」→「姓」の順で表示されるようになっているはずです。

ここで問題なのがユーザー登録した段階で「ユーザー名」=「ニックネーム」になること。何もしなければそれらの表示はばっちりユーザー名になってしまうんです(驚)。

WordPressは「ユーザー名」と「パスワード」による認証ですから、ユーザー名が類推できればあとは・・・もうお分かりですね。そしてWordPressという同じツールを使っている以上、ログインURLは共通ですし、ログインエラーの際画面上に「ユーザーが存在しません」→「パスワードが違います」の順で表示されるので、後者のエラーメッセージが表示されたら「ユーザー名は合っている」というのがバレバレです。

特に管理ユーザーの追加やインストール時にはこの項目を必ず設定するようにしましょう。

おすすめしない方法 ログインURLの変更

この手法を使う場合ほとんどの方がそれ用のプラグインを使われると思います。が、そのプラグインに何等かの不具合が起きて動かなくなったらどうしますか?まだURLを忘れるだけならそのプラグインのありがたい機能によってリカバリーできる場合もありますが、プラグインが停止してどこをどう変更しているのかを把握していなかったら・・・恐らくそのサイトは残念なことになります。

他にもいろいろな箇所のコード変更や、ファイル名の変更などをすることで手動実装も可能ではあるものの、それらのファイルが後述する本体のアップデートで一部だけ書き換えられたら当然動作しなくなるわけですからこちらも危険なカスタマイズということになります。

ここまでの対策をすべて行っていれば

  • 自分がアクセスできる場所以外からはログイン画面へのアクセスができないようになっている
  • メールアドレスを知っててもログインできないようになっている
  • ユーザー名が分からないようになっている

わけですから、不正にログインされる可能性はすごく低くなっていますし、それらは本体のプログラムに変化を加えるものではなく不具合が起きたら外から何とかなるものですので、わざわざ不具合が起こったときに修復できない可能性のある事柄を設定する必要はないと思います。

不正なコードが実行されないようにする

ここまでは第三者にログインされて悪さをされない方法を紹介してきました。ログインできなければ改ざんされる心配はない!!・・・残念ながらそんなことはありません。悪意を持ってアクセスしてくる輩はむしろここから紹介するサイトの穴を用いて攻撃をしてきますから、それらが実行できないように口を塞いでいくことが大事です。

外部から操作できる環境設定をなくす

「xml-rpc」ってご存知ですか??WordPressの利便性を向上させるために備わっている通信機能です。これを使うことで

  1. あらかじめ設定した電子メール宛にメールしたものから投稿が作成できる
  2. 管理画面以外から投稿を編集する
  3. 管理画面以外から投稿を削除する
  4. 管理画面以外からファイルのアップロードができる
  5. 管理画面以外からコメントの追加と削除を行う
  6. 管理画面以外からコメントの編集を行う
  7. ピンバックの送信
  8. WordPressアプリからの操作を可能にする

サイトの管理者(や正規のサイトユーザー)だけがこの機能を使う分には便利な機能なのですが、これを悪用して攻撃されることもあります。

単純にこうした機能を使わないのであれば、機能を停止して問題ありません。

「xml-rpc」を停止するには前に紹介したアクセス制限と同じ「.htaccess」ファイルへ無効にする以下のコードを追加します。

<Files "xmlrpc.php">
order deny,allow
deny from all
</Files>

※使用するプラグインによってはこの機能が有効でないと正常に動作しないものがありますので、設定後サイトが問題なく動作するか確認するようにしましょう

訪問者が入力できる口を可能な限りなくす

訪問者が入力するものと言えば・・・コメント欄、コンタクトフォーム、掲示板の入力窓、アンケート、レビュー投稿などがありますね。コメント欄を除き、これらは何かのコミュニケーションを取ったり、訪問者から評価や連絡を受けたりする通常のブログにはない便利な機能。いろいろ使ってみたくなるものです。

が、実はこれが悪さをするための入り口となってしまうことがあるのです。

サイトに悪さをしようとする人、プログラムはこれらの入力窓から

  • 悪さをするための入り口を作るコードを実行させるための記述をする
  • 入力すると特定のプログラムが実行されるような記述をする

などして、時にはユーザー情報を引っ張り出して使用したり、ウイルスなどのコードが自然にサーバー内やテーマファイル内などに展開されるようにしたりされることがあります。

一番いいのはこれらの窓をすべて塞ぐことです。コメントを非表示にすることもWordPressの基本機能でできますから、どうしてもコメントを求めたい記事を除き、基本的にはコメントを受け付けないようにした方が無難です。

QA AnalyticsQA Analytics

本体・プラグイン・テーマを最新バージョンにする

私の印象と経験では良い部分と悪い部分が混在するので最後の方に紹介することにしました。

まずWordPress本体の更新ですが、2.xからずーっとWordPressを使ってきた経験上、特にメジャーアップデート(数字の先頭が変わる更新 4.9.8→5.0.0)では更新することで逆に脆弱性が発覚して数日で次のマイナーバージョンがリリースされるということが多いです。また大がかりな仕様変更が伴うのもメジャーアップデートの特徴ですので、今まで動作していた機能に不具合や不都合が生じたりすることもありますので注意が必要です。

プラグインやテーマについてもメジャーアップデートは結構危険、特にプラグインは全く別物になる場合もあり、時には今まで無料で使えていたものが有料版でだけ使えるようになったりもしますので、更新の内容をしっかりとチェックしてからの更新をおすすめします。WordPress公式サイトで配布されているプラグインやテーマは基本的に過去バージョンを入手できるようになっているものの、これを残しておくかは任意のようですので、特にメジャーアップデートの際にはFTPなどで現状のフォルダをダウンロードしておくなりして備えた方がいいでしょう。

すべてのメジャーアップデートで一番怖いのが環境への対応。一応1~2世代前のPHPバージョンやデータベースバージョンに対応するようある程度下位互換性は持っていますが、本体の更新でエラーが発生し、サイトそのものが稼働しなくなってしまったり、本体の必要要件に環境を合わせることで今まで動いていたプラグインやテーマが動作しなくなったりととにかくいろいろ起こる可能性がありますから気を付けましょう。

そして万が一不具合が発生しても元に戻せるように、最低でも本体のメジャーアップデートを行う前には

  • WordPressがインストールされている場所のファイルやフォルダをすべてダウンロードする
  • phpMyAdminを使って該当サイトのデータベーステーブルをバックアップ(ダウンロード)する

という一番古典的な方法でバックアップを取るようにしましょう。

なぜバックアッププラグインじゃダメなの?と言われそうですね。試しにご自身が使われているバックアップ&復元プラグインで実際にバックアップを復元したことありますか??多分皆さんの答えは「No」でしょう(笑)。

バックアップ&復元プラグインの多くは独自形式のファイルでバックアップファイルが作られるようになっていて、復元についてはある程度の容量までは無料、または完全に有料というパターンのものが多いんです。恐らくよくよくプラグインの説明を解釈するか、作者独自の紹介サイトをじっくり読まないと分からないと思います。いざ復元をと操作したら法外な金額を提示されてビックリ!!とならないよう、上の方法できっちりと手動バックアップを取っておきましょう。そしてできればそれを元に復元する作業も経験しておくと尚ベストです。万が一復元できなくても、古来の形態でバックアップさえされていれば有識者にお願いして復元してもらうのも可能ですからね。

総合的なセキュリティ対策は専門プラグインに任せる

ここまでは自身でできるセキュリティ対策について紹介してきましたが、WordPressサイトで動いているもののすべてが把握できている方でなければ思わぬところに弱みがあるかも知れません。それを可能な限り防御するためにはやはり総合セキュリティプラグインを使用するのが無難です。

「ここまで来て結局それかい!!」と怒られそうですが、セキュリティ対策プラグインとて完璧なものは存在しませんから、独自に防衛できるところは対処して、その他未知の部分はプラグインに任せるという何重もの防衛線を持つことでよりセキュアな環境が構築できますから、手動の施策も併せて行うことをおすすめします。

さて、たくさんあるセキュリティプラグインの中から何を選ぶ?ということになるのですが、ポイントは

  • 独自の脅威情報を持ち、それが定期的にサイトへ反映されるようになっていること
  • 全自動ではなくさまざまな設定が自身でできるようになっていること
  • セキュリティプラグイン自体に脆弱性がある場合にきちんと対策を講じて更新されていること
  • 有料版と無料版の違いについてきちんと示されていること

です。私がおすすめするのは

というプラグイン。既に使われている方も多いと思います。無料版では

  • 脅威情報が最新ではなく30日遅れのものになっていること
  • コンテンツが100%完全に防御されるのではないこと(Wordfenceが考える完全防御までは実施しないこと)

が有料版との最大の違いですが、それで構わないということであれば無料版で差し支えないでしょう。

このプラグインは初期設定を行えば自動で動作し、おおよそ1週間「学習モード」としてサイトの状況を学習してより最適な設定になるように調整してくれますが、ほとんどの機能設定が後から変更可能になっていますので一度きちんと見直すことをおすすめします。

最後に(総まとめ)

いかがでしたか??WordPressのセキュリティについて少しでも興味を持って調べたりした方ならご存知のことばかりで恐縮ですが、1つでも役に立つ追加設定があればぜひ設定してください。

ここで紹介したセキュリティアップを行っても誰でもアクセスできる場所に公開されているホームページですし、汎用であるWordPressというツールを使っているわけですから、どこまでいっても100%安全というものは存在しないと考えた方が無難ですから、その中で可能な限りサイトに悪影響を与えられることがなくなる努力として今回紹介した内容を参考にしていただけたら幸いです。

著:清水 由規, 著:清水 久美子, 著:鈴木 力哉, 著:西岡 由美, 読み手:星野 邦敏, 読み手:吉田 裕介
¥2,889 (2024/02/08 17:07時点 | Amazon調べ)