WordPressのセキュリティについての考察 ~不正ログイン・改ざんを防ぐための手法メモ~

公開日:2023(令和5)年6月7日/最終更新日:

WordPressのカスタマイズ方法についての画像



WordPressに限らず、インターネット上で誰にでも見えるように何かを公開するというのは、公開した段階から常にセキュリティリスクと隣り合わせで運営していくこととなります。

とりわけ、WordPressをはじめとする、比較的簡単に自身の契約したレンタルサーバーなどへ導入して使えるツールでは、セキュリティに関する関心や知識がほとんどないまま公開し、ある日突然サイト内のプログラムを書き換えられたりして不具合が生じるというケースが少なくありません。

よく、何かの不具合が出たことを、ツールのせいにしてしまうような発言を耳にするのですが、言葉を選ばずに申し上げれば、これは、そのツール云々というよりも、何か悪さをされることはないのか?という危機意識が欠如しているだけなのではないかと思います。

そこで本ページでは、WordPressで運営しているサイトで、起こり得る様々なセキュリティリスクの存在、自身のサイトで行っている対策方法などを、思いつくままに紹介していきます。

一口にセキュリティと言っても多岐にわたりますし、何に対するセキュリティを高めるのかというところでも必要な事柄が異なります。また、私はインターネットセキュリティに関する専門家ではありませんので、本ページの内容を鵜呑みにせず、参考として、ご自身でも調べた上で必要な措置をされるようお願いします。

セキュリティを高めるための手法いろいろ

WordPressサイトでできるセキュリティ対策

ユーザー名・パスワードを複雑なものにする

重要度:★★★★★ 設定難易度:★★☆☆☆

これはどんなサービスでも共通ですが、分かりやすいからとユーザー名をいろいろなサービスで同じにしたり、パスワードも面倒だから半角英数字(小文字だけ)で、しかもいろいろなサービスで同じにしたりを、特に管理者権限を持つユーザーで行うことはご法度でしょう。

また、ブラウザのパスワードマネージャー(ログイン情報を記憶しておく機能)では、基本的に同一ドメインのユーザー名やメールアドレスと組みになるパスワードは1つしか保存できないので、サブディレクトリやサブドメインにインストールしたサイトも共通のユーザー名・メールアドレス・パスワードにしてしまうことはありがちなパターンでしょう。

でも、例えばメインサイトに侵入されたとして、そのダッシュボードに関連サイトの管理画面へのリンクなどを挿入していた場合はいかがでしょう?共通のものだとしたら、それらすべてが完全に乗っ取られる危険性があります。

ログイン画面上で選択する必要はありますが、サイトごとに、少なくとも管理ユーザーの「ユーザー名」「メールアドレス」は別のものにして、もちろんパスワードも別にして、パスワードマネージャーと上手に付き合っていくのも手だと思います。

サイトメールアドレスと管理ユーザーのメールアドレスを異なるものにする

重要度:★★★★★ 設定難易度:★★☆☆☆

これ結構そのままの人が多い印象があります(確認したらそうなっているかも..)。

WordPressは、サーバーの自動インストールを使うかどうかに関わらず、インストール画面のメールアドレス欄は1つしかありません。

つまり、サイトのメールアドレスと最初に登録する管理ユーザーのメールアドレスは共通になるようになっています。

恐らくインストールをできるだけ簡単にすることと、いきなり2つメールアドレスをと言われても..とならないように配慮されているのだとは思いますが、実はこれ、とても危険なんです。

WordPressでは、サイトのメールアドレスを送信元として、コメント関係の通知や、その他の通知が行われます。ということは、何かの通知が行われれば、それが管理者のメールアドレス=ログイン情報と類推されてしまう可能性があるのです。

  1. 管理ユーザー用のメールアドレスを用意する
  2. プロフィール画面からメールアドレスを変更する
  3. 変更したアドレス宛に届いたメールのリンクをクリックして変更を確定する

たったこれだけの作業で、セキュリティ状態は高まるのですから、必ずやるようにしましょう。

管理ユーザーのメールアドレスは特にサイトのドメインと同じである必要はないので、別のドメインのメールアドレスを使うようにすればさらに類推されにくくなります

ユーザー名が漏洩しないようにする

重要度:★★★★★ 設定難易度:★★☆☆

WordPressのユーザー名は知らない間に、主に以下のところから漏洩しています。

  1. 作者情報の表示名を何も変更していない場合の投稿末尾など
  2. 作者の投稿したものの一覧ページ(作者ページ)のURLの一部
  3. REST APIで作者情報を取得する

WordPressでは、初期状態で「ユーザー名=閲覧ページでの表示名」になるようになっていますので、投稿や固定ページのテンプレートによっては本文先頭や末尾にばっちりユーザー名が表示されてしまうという場合があります(1のケース)。

また、表示名を変更していても、作者の投稿したものを列記する「作者ページ」のURLを見ると、末尾の部分にユーザー名がばっちり出力されてしまっています。

さらに、他のサイトから情報を取得したりするために利用される「REST API」という機能を使用すると、そのサイトに登録されている、ユーザー名を含むユーザーの情報が、これまたばっちり出力されてしまっています。

つまりユーザー名は簡単に漏洩してしまうんですね。これを防ぐには、

  1. インストール後、管理ユーザーの表示名は必ずユーザー名と異なるものにする
  2. 表示される作者スラグをユーザー名以外のものにする
  3. 不要なREST API接続を拒否する

といった対策が必要でしょう。1はプロフィール画面から手動で設定でき、2や3については、各リンク先ページを見てカスタマイズするといいでしょう。

ログイン情報をユーザー名かメールアドレスに絞る

重要度:★★★★★ 設定難易度:★★☆☆

これはその他のセキュリティ対策を含めて考える必要があります。

例えば、ユーザー名の情報をフロントエンドのどこからも判別できないようにするのであれば、ユーザー名のみにするのが妥当ですし、管理ユーザーのメールアドレスを類推されにくいものにしたのであれば、メールアドレスに限定するのが妥当でしょう。

ユーザー名によるログインを禁止する方法(メールアドレスによるログインのみを許可する方法)については以下のページ中でも紹介していますので、よかったらどうぞ。

ログインURLを変更する

重要度:★★☆☆ 設定難易度:★★

トラブルがあった時に確実に元に戻せるなら..という注釈を入れておきたい対策です。

WordPressのログインURLは大きく以下の2方法でアクセスできます。

  • 「サイトアドレス/wp-login.php」とアドレスバーに入れて直接開く
  • 「サイトアドレス/wp-admin」とアドレスバーに入れて開き、ログイン画面にリダイレクトさせる

汎用ツールなので基本的にどんなWordPressサイトでも共通です。

これをプラグインやカスタムコードなどを使って変更することでログイン画面を隠すこともできます。

ただ前述した書いた通り、もしもログインURLを忘れてしまった、ログインURLを変更するプラグインに不具合が出たなどの理由でログイン画面にアクセスできなくなってしまった場合、元に戻して復旧させる方法を知らなければ、永遠にサイトの編集はできなくなってしまいますので、注意が必要です。

特定の場所以外からログイン画面を開けないようにする

重要度:★★ 設定難易度:★★

もしも自分だけが管理していて、しかも自宅など特定の場所からしか管理画面側にアクセスしないというのであれば、この方法が最も強力だと思います。

.htaccessファイルを編集して、特定の場所(グローバルIPアドレス)以外からログイン画面を開くのを完全拒否する方法で、例えば自宅以外を拒否すれば、自宅に泥棒に入り、自宅からのインターネット回線に接続してログイン画面を開く...なんて現実的に不可能でしょうからね(細かいこと言えば同じサービスで同じグローバルIPを割り振っている拠点ということになりますが..)。

この設定での問題は大きく2つ

  • 外出先などから急遽編集したくなってもできないこと
  • 自宅のインターネット接続のサービスやプランによってはグローバルIPアドレスが変わってしまい、変わる都度.htaccessファイルを編集する必要があること

ただ、これで堅牢になるのであれば、さして問題ではない気もします。

設定例は以下のページでも紹介していますので興味のある方はどうぞ。

ちなみに現在このサイトでもやっていますので、このサイトのログインURLを叩いて試してみていただいても結構です(笑)。

ログイン失敗時のメッセージを変更する

重要度:★★ 設定難易度:★★

WordPressでは、複数のユーザーが登録し、共通のログイン画面を使ってログインを行うことを想定して、ログインの失敗時に「ユーザーIDが合っているか(存在するか)」「メールアドレスが合っているか(存在するか)」「パスワードが合っているか」を画面へ表示するようになっています。

もちろんマルチユーザーのサイトでは有効ですが、誤っているのが「ユーザー名」なのか「メールアドレス」なのか、「パスワード」なのかがバレバレになってしまうので、自身のみが管理するサイトでは不要な機能とも言えます。

以下のコードを有効化しているテーマのfunctions.phpなどへ追加することで、「どこが?」というのをなくし、単純に「ログインに失敗しました」という表示だけを行う仕様へ変えることができます。

if ( !function_exists( 'sample_change_failed_login_message' )){
function sample_change_failed_login_message() { 
$message = 'ログインに失敗しました';
	return $message;
}
}
add_filter( 'login_errors','sample_change_failed_login_message' );

コード中の「ログインに失敗しました」の部分を変更すれば、オリジナルのメッセージを表示できます

リモート投稿機能を停止する

重要度:★★ 設定難易度:★★

WordPressにはメールで送信したものを投稿として公開する機能があります。

実際に運営していて、この機能を使用することはごく稀かと思いますので、無効(厳密には受け付けを停止)させます。

以下のコードをサイトの.htaccess先頭付近に追記するか、「xmlrpc」と検索して出てきた無効化プラグインの中から選んで有効化するといいでしょう。

<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>

表示画面側から何かを送信するコンテンツの導入は慎重に検討する

重要度:★★ 設定難易度:☆☆

WordPressは例えれば将棋と同じで、最初の布陣が最もセキュリティに対して堅牢な状態であると言えます。

そこに表示や機能を持つテーマを入れる、好みの機能を実現するためのプラグインを入れる、さらに個別にカスタマイズするためのコード類を挿入するといったことが加わることで、セキュリティに穴が開くケースがあります。

特に、表示画面(フロントエンドとも言います)側から、訪問者などが何かの送信をできる機能や、通常のログイン画面以外からログインやユーザー登録をさせるような機能については、本当に必要なのか、本当にそれがないとダメなのかを十分に検討する必要があります。

このケースでよくあるのは、フロントエンドから投稿できる機能を設けた際に、スクリプトやHTMLタグといったものを送信できるようになってしまっていたり、その場所(フォームなど)からの送信のみを受け付けるようになっていなかったりすることで、悪意あるコードが送信され、それを足掛かりに不正アクセスが行われるといった例です。

もしも、そうした機能をどうしても導入したい場合には、その部分だけを分離して、サブドメインやサブディレクトリに全く別のWordPressサイトをインストールして機能させるといった工夫をしておくことで、万が一改ざん等の被害にあったとしても、部分的な損害だけで済ませることができます。

本体やプラグインを常に最新の状態にする

重要度:★★ 設定難易度:

セキュリティというと、真っ先にこれを思い浮かべる方が多いと思いますが、私の中でこれは最低限やることであって、これをしておけば大丈夫というものでは決してありません。そういう意味で、この項の最後にしています。

特に改ざん(ファイルへ悪意のあるコードなどを挿入されてしまうこと)を防ぐという意味では、プラグインや本体、テーマの脆弱性の1つを突いて、裏からアクセスされるための口(バックドア)を作られてしまい、裏側で何等かの改ざんをされてしまうというケースがないことはないと思うのですが、非常に稀だと思います。

また、WordPress公式で配布されているプラグインやテーマも、初期リリース時にはプログラムの詳細な解析がされ、クリアーしたものだけが配布可能になる仕組みにはなっているものの、その後の更新についてはチェックが至らない(原則はノーチェックかと思われます)ので、よく更新されているからと安心するのは早いと思います。その証拠に、他のツールなどで脆弱性の指摘を受ける→改善する→改善版をリリースするということも多いです。

これがよくSNSなどで流れてくる「〇〇プラグイン、脆弱性が見つかったので、〇〇に更新しましょう」などという情報です。毎回の更新版のリリース時にチェックされていれば、こうしたことは起こらないでしょうからね。

従って、プラグインやテーマ、本体の更新をしていれば大丈夫というのは、あまりにも他責にしすぎですし、無頓着ではないかと感じます。

不要なテーマやプラグインについては、無効化(できればファイルアクセスなどの危険性を回避するために、完全削除)をお勧めします。

現行のWordPressにおけるデフォルトテーマは、不具合発生時の強制有効化テーマですので削除しないようにしましょう

WordPressでは、本体やプラグインの更新があった際に、自動的に更新をする機能が備わっており、設定しておけば何もしなくても最新版へアップデートしてくれますが、環境などの問題によってエラーが発生した場合には、知らない間にサイトがストップするという状況になることもあるため、個人的には手動での更新をおすすめします。

以下のプラグインを使うと、プラグインやテーマの更新をメールで教えてくれるので地味に便利だと思います(ちょっと古いプラグインなので使用するかどうかは自身で判断ください)。

WordPressが動作している環境でできること

WordPressのセキュリティアップとして案外忘れられているのが、WordPressが収容されている環境の対策です。これはそのサイトに限らず、契約しているサーバー内の機能全体に悪影響を及ぼしかねないので、きちんと確認・設定しておくことをおすすめします。

サーバーの不正アクセス防止サービスを活用する

重要度:★★ 設定難易度:

多くのレンタルサーバーでは不正アクセスを防ぐため、WAFまたはそれに準ずる機能があらかじめ用意されていて、基本的には有効になるようになっています

任意で無効にできたり調整できたりするサーバーもありますが、うまくいかないからとオフにせず、サーバーのマニュアルや、サポートを利用して、オンにしたままでも解決する方法を探って対処してください。

サーバーへ不正ログインされないようにする

重要度:★★ 設定難易度:

忘れてはならないのが、サーバーへ管理者(ファイル等の編集権限を持つユーザー)としてログインする際のユーザー名(メールアドレス)やパスワードです。当然ながらこれらが漏洩すれば、WordPressというレベルではなく、自由に外敵に操作されてしまうわけです。

それから、パソコン上とサーバー上でファイルなどのやり取りを行うために使用するFTP接続情報も重要です。これも漏洩してしまえば自由にファイルの改ざんができてしまうのでとても恐ろしいです。

私の経験上では、カスタマイズなどの依頼をいただいた方に、対処後サーバーやFTP接続用のパスワードを変更するようにお願いしているものの、再度ご依頼いただいた際には「前と一緒です」という回答をされる方が実に多いです。

私以外の方へ依頼される際にも、案件によっては、これらの情報を聞かれると思うのですが、対処後にそのままというのは、あまりにもセキュリティに対して無頓着なのではないかと思います。

WordPressに限らず、ホームページのデータはサーバー上に転送して公開しているわけですから、自身ではない誰かにサーバーへのログイン情報を渡したなら、必ず案件終了後にはパスワードの変更をしましょう。

ファイルへのアクセス権限(パーミッション)を不明なまま変更しない

重要度:★★ 設定難易度:

よほどのことがない限りこの部分を触ることはないと思いますが、サーバー内のファイルやディレクトリごとに「読み取り」と「書き込み」を誰ができるかを指定するパーミッション設定というのがあります。

いろいろな数字で指定するのですが、特に危険な設定に「777」という誰でも「読み取り」や「書き込み」ができる権限があり、自身で何かの機能を追加する際や一部のプラグインなど(今はほとんどないと思いますが..)で、読み取りや書き込みができない状況を回避するために変更してしまったり、変更を促されたりすることがあります。

WordPressを使用するに当たっては、この「777」を付与する必要は全くなく、逆にそうしないと動作しないようなプログラムは、ひいては自身のサイト全体を危険にさらすための口を開けることにもなりかねませんので、むやみに変更しないようにしましょう。

設定ファイルへアクセスできないようにする

重要度:★★ 設定難易度:

最近ではレンタルサーバーで自動インストールされる方が多いので、知らない方が多いのかもしれませんが、そのWordPressサイトが動作するための基本情報が書かれた「wp-config.php」というファイルがあります。

このファイルは外部からアクセスする必要がないため、.htaccessでアクセス制限をします。

<files wp-config.php>
order allow,deny
deny from all
</files>

テーマカスタマイズや独自プラグイン作りで気を付けること

大きくは入力や設定した値を保存する場合の措置と、最終的に情報をHTMLとして出力する際の措置の2つに配慮する必要があります。

WordPressは人気のツールなので、たくさんのカスタマイズコードが紹介されています。特に閲覧画面や管理画面から何かを入力して保存するといった機能を追加する際には、以下のような措置がされているか、または自身で追加してセキュリティ状態に配慮する必要があります。

入力・保存できる値を限定する

重要度:★★ 設定難易度:

フォーム入力時の値を制限する

フォームの入力によく使われるinputタグのパラメーターに文字の制限をして、意図しない文字列が入力されないようにします。

例:数字のみに限定する場合

<input name="" type="text" id="" value="" pattern="^[0-9]{1,2}$">

inputタグのpattern属性についてはこちらを参考にしてみてください。

フォーム保存時にデータの確認をする

多分セキュリティのことを気にしたことのある方なら「サニタイズ」というのを耳にしたことがあるでしょう。参考ページによって様々ですが、サニタイズは英語で「Sanitization」、直訳すると「消毒」という意味なので、これに限ったことではないものの、ただ、WordPressのように入力したデータをデータベースという箱に保存し、それを引っ張り出してページ化するツールでは、入力された情報をデータベースに保存する際の最後の砦という意味ではこの処理を「サニタイズ」というのはあながち間違いではないでしょう。

詳しい説明は省きますが、データ保存時に、入力する値の種類に応じた検証関数を引っ掛けて、正しければデータベースに保存、誤っていれば拒否するという機能を持たせてセキュリティを高めます。

サニタイズ関数については、以下のWordPress公式ページを参照ください。

意図した場所以外からの入力を拒否する

重要度:★★ 設定難易度:

WordPressに限らず、何かを入力する項目を設ける際に、「確実にその画面のフォーム項目から入力されているか」をチェックする機能として、nonceフィールドというのがあります。

これは、入力フォームと紐づいた「その場所」特有の入力項目を追加するもので、両方のフォームの存在が確認されない(つまりその場所で入力されたものでない)場合には値を保存しないという機能を持たせるものです。

nonceは、WordPress標準の方法で作成したプラグインやテーマの設定フォームでは、自身で設定しなくても自動で付加してくれるので特に気を遣う必要はありません(実際にテーマカスタマイザーやプラグイン設定画面のソースを見てもらえれば分かります)。もしも付与されていなければ、自身で付与する必要があります。

ただし、それ以外の場所、例えば投稿編集画面上にカスタムフィールドなどの値を入力しやすくするフォームなどでは自動で付加されませんので、必ず確認して、nonceフィールドが付与されているかを確認し、なければ追加するようにしましょう。

また、フロントエンド(表示画面)から何かを入力して送信する機能を持たせる時には、特に注意が必要ですし、ないとは思いますが、そうしたフォームを生成するプラグインを使う際には、自身の目でnonceフィールドが付与されているかを最低限確認しましょう。

nonceについては以下のページで以前にいろいろと書いてますので、よかったらどうぞ。

出力するコードのエスケープ処理

重要度:★★ 設定難易度:

ウェブページがページとしてブラウザに表示されるようになるには、最終的にHTMLという言語に従って出力する必要があります。

もちろんWordPressも裏側で最終的にHTMLを生成するためのツールです。

エスケープ処理は、このHTML生成の際に、動作してはいけない文字列をHTMLが文字として認識するだけの値に変更したり、不要な文字列(出力してはいけない文字列)を削除して出力する機能です。

これを行うことで、データベース内に何等かの方法で格納されてしまった悪質なコードをHTMLとして出力する際に、悪質な処理が走らないように無害化することができます。

また、エスケープ処理はフォームの入力側でも使用できますので、データを保存する項目等に処理を追加することで、保存時・出力時の両方でセキュリティアップを図ることができます。

プログラムへの直接アクセスを禁止する

重要度:★★ 設定難易度:

これは、テーマフォルダや独自プラグインなどにPHPファイルを設置する際に、そのファイルへ直接アクセスされないための措置です。

PHPファイルを追加した際には、おまじないのように、先頭行へ以下を追加するようにしておけば、外部から直接アクセスされないようになります。

<?php
//このファイルへの直接アクセスを禁止
if ( !defined( 'ABSPATH' ) ) exit;

CSSやJSにはこの措置を行う機能はありません。理由はこれらがブラウザ上で読み込まれ、ブラウザ側で実行されるため、アクセスを拒否することができないからです。

セキュリティアップ系プラグインに頼るのは危険なのかも

セキュリティの件でよく議論されるのが、どのセキュリティアップ系プラグインがいいのかということです。

ただ、大前提として、WordPress外(サーバーへ直接など)で突破されてしまった場合には無力となりますから、安易に「セキュリティプラグインを入れてるから万全」と考えるのは早晩でしょう。

セキュリティアップを図ることのできるプラグインはたくさんリリースされていて、「Wordfence Security – Firewall, Malware Scan, and Login Security」あたりが有名で使用されている方も多いでしょう。

しかしながら、有名=使っているサイトが多い=共通の弱み(脆弱性ともいう)が見つかった場合にはそれをめがけて攻撃されるかもしれないという懸念はあります。

また、これまで書いてきたように、いろいろな対策を取らなければ、例えばそもそも管理ユーザーのユーザー名とパスワードが類推しやすいようなサイトであれば、当然ながらせっかく入れた有用なセキュリティ対策プラグインも無力になってしまいますから注意しましょう。

日本の方が作られているセキュリティ対策系プラグインでは以下が細かいところまで行き届いていておすすめですよ。

不正アクセスとは関係ないが行っておきたいこと

セキュリティというとこの要件もあって、結構ごちゃごちゃになってしまうのですが、直接的に悪さをされるというものではなく、通信中に何かをされる可能性のあるものと対処方法を紹介しておきます。

SSL通信化

最近ではドメイン取得時に自動でSSL証明書が割り当てられるようになっているので、あまり意識しなくてもSSL通信できるようになってきました。

SSL通信というのは、ブラウザとサーバー間で何かのやり取りをするときに、SSL証明書に含まれるキーを用いてデータを暗号化してやり取りすることです。

やり取りの途中で何かを読み取ったり、何かを差し込んだりしようとすることを困難にして、例えばフォームに入力したデータなどが漏洩しないようにしたり、入力値自体に何かを追加したりするのを防いでくれる機能です。

SSL証明書には無料のものと有料のものがありますが、機能に関しては特に違いはありません(無料のものは比較的短期間で更新が必要ですが、サーバー側で自動更新してくれるものが多いので気にする必要はないでしょう)。

自身のサイトがSSL通信されているかは、WordPressであれば設定画面を開き、「WordPress アドレス (URL)」「サイトアドレス (URL)」が「https://~」になっているかで判断できます。

また、一度サイトのトップページ以外(個別の投稿や固定ページなど)でわざと「http://~(sをつけない状態)」で開いてみて、「https://~」に自動で変更されなければ、SSL通信は利用できるが非SSL通信も可能な状態になっていますので、SSL通信のみに限定する(常時SSL化と言われています)措置を講じた方がいいでしょう。

セキュリティヘッダーの使用

常時SSL通信をしていることを前提として、通信の傍受をさらに強固にするのがセキュリティヘッダーです。

セキュリティヘッダーの追加などについては、以下のページを参考にしてみてください。

改ざんなどの被害に遭ったときのために

ネット上に公開されているのですから、どんなに対策をしていても被害に遭うことは避けられないと思います。

そんなときに役立つのがバックアップということになり、同種のプラグインが多数リリースされているのでそれで自動的にバックアップしてるという方も多いのではないでしょうか?

問題はバックアップを取ることではなく、バックアップデータの保存先と復元させられるかどうかです。

プラグインに頼ってバックアップをされている方は恐らく復元の方法を知らないか、復元機能が含まれたものを使ってるから大丈夫と思っていらっしゃるかも知れません。

でも、実際に復元したことがある方は恐らくごく少数でしょう。本当に大丈夫ですか?

そこでおすすめしたいのが、自身で手動で1つWordPressサイトを作ってみることです。

WordPressのインストールはそれほど難しくなく、以下の手順で行えます。

  1. サーバー内に参照する場所(ドメイン直下やその下に作ったディレクトリ)を確保する
  2. 公式サイトからWordPressの最新版を入手して解凍する
  3. サーバー内でそのサイト用のデータベースを作成し、紐づけるデータベースユーザーを登録
  4. 2のファイル内にある「wp-config-sample.php」を「wp-config.php」へ変更し、データベース情報・接頭辞・認証用ユニークキーを指定して保存
  5. 4を1へアップロード
  6. 1のURLへアクセスして、必要情報を入力してインストール
  7. 管理者権限を持つ最初のユーザーのメールアドレスを変更

そして、バックアップファイル(データベースとファイルフォルダがある場合)の復元については以下のようにすればプラグインに頼ることなく復活できます。

  1. ダメージを受けたWordPressサイトのフォルダから、「wp-content」フォルダと「wp-config.php」をダウンロード
  2. 公式サイトからダメージを受けたサイトと同じバージョンのWordPressを入手して解凍
  3. 2へ1を上書き
  4. サーバーの該当データベースへ接続してテーブルを一旦削除
  5. バックアップのうちのデータベーステーブルをインポート
  6. ダメージを受けたWordPressサイトの収容場所にあるフォルダやファイルのうち、「wp-admin」「wp-includes」「wp-content」フォルダとその他のファイルすべて(SSL関連のフォルダなどサーバー側で追加したフォルダは残す)削除
    (削除前にads.txtなど、何かの認証を行うファイルがあればそれのみを3へ追加)
  7. 削除した場所へ3をアップロード

で、クリーンなWordPressにテーマやプラグイン、画像などのファイル、投稿その他の情報(データベース内のテーブル)がすべて機能した状態で再起できるはずです。

...といいながら、慣れていない方は難しいでしょうから、確実に戻すには、経験のある方や有料のサービスなどに頼るのが一番だと思います。

そうなる前に...可能な限り改ざんの被害に遭わないよう、これまで紹介したものを参考に手当をしておくことをおすすめします。

まとめ

長々といろいろと紹介してきたので、途中でやーめた!と離脱した方も多いでしょうが、WordPressは利便性からたくさんの方が使用されているサイト管理ツール(CMS)ですから、自身でできることから確実に対策はしていった方がいいでしょう。

最後に、私自身の管理するサイトで、至って私的にしていて、動作保証はできないけど使ってみたらどう?というゆるいスタンスで、このサイトで配布している以下のプラグインにも、ログインセキュリティ等に関するいくつかの機能を備えていますので、よかったら試してみては?