WordPressのセキュリティ対策

WordPressでWebサイトを構築している方、セキュリティ対策は万全でしょうか?
WordPressは有名なソフトウェアなため、攻撃対象として狙われることも多いです。
ハッキングの被害に遭って大事なサイトを失わないためにも、しっかり対策しておきましょう!
当ページでは、実務でWordPressの運用・保守を担当をしているエンジニアが対策方法を紹介します。
 
 

【脅威】管理者画面からの不正アクセス

デフォルトの設定では、パス「/wp-admin」へアクセスすることで管理者用のログインページへアクセスすることができます。 ログインIDとパスワードを推測したり総当たりすることで認証を突破される恐れがあります。
認証が突破されてしまった場合、サイトの内容を書き換えられたり大事なデータを削除されてしまう可能性があります。
 
以下に挙げるような対策を実施することで、管理者画面からの攻撃を防止することができます。

【対策】パスワードを強固にする

管理者画面のログインパスワードをなるべく強固なパスワードに変更しましょう。
8文字以上の英字・数字・記号を含む値で、推測が難しいものが良いです。
複雑なパスワードは暗記が困難なため、1Passwordなどのパスワードマネージャーを使って管理するのがオススメです。
 

【対策】IPアドレス制限

管理者画面へアクセス可能なIPアドレスの制限を検討しましょう。
お名前.comでレンタルサーバを契約している場合、レンタルサーバの管理画面から国外のIPアドレスからWordPressの管理画面(ダッシュボード)へのアクセス制限をすることができます。

【対策】ロックアウト機能を有効にする

アカウントロックアウト機能(連続でログインに失敗すると一定時間ログインを禁止する機能)を有効にすることで、総当たり攻撃を防ぐことができます。
お名前.comでレンタルサーバを契約している場合、レンタルサーバの管理画面から制限をワンクリックで追加することができます。
 
 

【対策】ユーザID情報を隠す

以下のようにURLに「?author=1」を付けてアクセスすると、WordPressのアカウントIDが「1」のユーザの著者別アーカイブページにリダイレクトされます。
リダイレクト先のURLには管理者のユーザ名が含まれるので、WordPressのログインIDが分かってしまいます。
アカウントIDは連番なので順に試していくだけでユーザ一覧を取得できてしまいますね…。
 
ログインIDがバレるのを防ぐための対策として、以下の2点の動作をWebサイトに追加することをオススメします。
  • 「?author=」を指定しても著者ページにリダイレクトしない
  • authorディレクトリ配下のページはトップページにリダイレクトする
 
以下のソースコードを、使用しているテーマ内のfunctions.phpに追加することで動作します。
 
管理画面の「外観>テーマファイルエディタ>functions.php」より、functions.phpを編集可能です。

【脅威】WordPressやプラグインの脆弱性

【対策】不要なプラグインは削除する

使用していないプラグインは無効化するだけでなく、削除まで実施しましょう。
無効化の状態ではプラグイン関連ファイルにアクセスすることができるため、削除しておくと無難です。

【対策】常に最新バージョンへ更新する

WordPress本体は常に最新バージョンに更新することをオススメします。
自身のWordPressの現在バージョンは、管理画面のダッシュボードの概要欄などからも確認できます。
WordPressの最新バージョンはWordPressの公式サイトのリリースページより確認できます。
 
また、プラグイン一覧画面で、下図のように「新バージョンが利用できます。」のポップアップが表示されている場合は、更新内容を確認して問題なければ更新しましょう。
 

【対策】バージョン情報をなるべく隠す

使用しているWordPressやプラグインのバージョン情報は外部アクセスからは分からないようにしておきましょう。
脆弱性が存在するバージョンを使っている場合、攻撃者が攻撃してくる可能性が高まります。
 
ブラウザの検証ツールなどで、サイトのソースコードを確認してみましょう。
デフォルト設定では以下のように、プラグインやテーマを読み込んでいる箇所にWordPressやプラグインのバージョン情報が出力されてしまっています。
 
⬇️ WordPressのバージョン「6.2」が表示されている
⬇️ プラグインのバージョン「ver=5.7.5.1」が出力されている:
 
また、例えば、パス「/wp-links-opml.php」へアクセスすると以下のようなページが出力されます。「generator="WordPress/6.2"」とあるようにWordPressのバージョン情報が分かってしまいます。
 
WordPressとプラグインの全てのバージョン情報を非表示にするには、使用しているテーマ内の「functions.php」に以下のソースコードを追加します。
そのままコピペでOKです。
 
管理画面の「外観>テーマファイルエディタ>functions.php」より、functions.phpを編集可能です。
 
ソースコードを追加して「ファイルを更新」をクリックすると、サイト内のバージョン情報が消えます。

【脅威】DoS攻撃

DoS攻撃とは、
 

cron

 
wp-cron.phpとは、
cronを利用していないのに「/wp-cron.php」にアクセスできる場合は、機能を制限しましょう。
 

【脅威】情報の不正取得

公開が不要なファイルから

XML-RPC APIへのアクセス制限

XML-RPC経由でAPIを提供している。
XML-RPCとは、エンコードにXML形式、転送にHTTPを採用した、RPC (Remote Procedure Call)のプロトコル。
 
Pingbackとは、他のサイトであなたのサイトのリンクが貼られた時に、あなたに通知が来る
 

Rest-APIへのアクセス制限

 

wlwmanifest.xmlへのアクセス制限

wlwmanifest.xmlとはMicrosoft製のブログ投稿ソフト「Windows Live Writer」からWordPressに記事を投稿する際の情報が記載された設定ファイルです。
 
WordPressの管理画面(ダッシュボード)から記事を投稿する場合は、

wp-json

おわりに

ハッキングの被害に遭って大事なサイトを失わないためにも、WordPressでのセキュリティ対策はしっかりしておきましょう!