いくらWordPressをホストするサーバーのセキュリティを高めたところで、WordPressが脆弱だと意味がありません。WordPressのセキュリティ対策をまとめてみます。
それぞれの先頭の★は、3段階でその対策の効果を元にしたお勧め度を表します。
管理用のユーザー名を変更する(★★★)
ログインする際のユーザー名は管理画面の設定から変更することができません。ただし、新しくユーザーを作成し、古いユーザーを削除する方法で管理用のアカウントを作り直すことができます(記事は引き継げます)。adminのような脆弱なユーザー名を使っているのであれば、今すぐにでも変更すべきです。また当然ですがパスワードは使い回さず、堅牢なものを設定しましょう。
ログイン時に2段階認証を行う(★★★)
2段階認証というのは、IDとパスワードの他にワンタイムパスワードを入力する方式のことです。管理画面へのブルートフォース攻撃対策にとても有効です。
WordPressでこれを実現するには「Google Authenticator」プラグインがお勧めです。ユーザー毎に二段階認証の有効無効を切り替えることができます。スマートフォンに「Google Authenticator」のアプリをインストールして、WordPressのユーザー管理画面に表示されたQRコードをスキャンして紐付けます。ちなみに、有料版の1Passwordなど一部その他ワンタイムパスワード用のアプリでも利用可能です。
ログイン用のURLを変更する(★★★)
WordPressは /wp-admin や /wp-login.php にアクセスすることでログインページが表示されますが、このログイン用のファイル名を変更してしまうことでそもそも不正なログインを試される可能性がぐんと下がります。
直接コードに手を加えて実現することも可能ですが、日本語対応のお勧めプラグインもあります。Login Rebuilder です。これも簡単に実装可能な上、効果はとても大きいので是非実装しましょう。ただし、他のセキュリティ系プラグインとの相性が悪いこともあるのでその点は要注意です。
wp-config.phpファイルを守る(★★☆)
このファイルはWPがデータベースに接続するための接続情報などが含まれ、流出などに一番気をつけなくてはいけないファイルです。PHPのコードになっているため、PHPファイルが正しく処理される環境下では基本的に問題になることはありませんが、万が一PHPが正常に処理されなかった場合に備えてウェブサーバー側で対策を講じておきましょう。
nginxの場合、/etc/nginx/nginx.confのserverセクションに以下を記述します(ただしphpをハンドリングしている箇所より上に書く必要があります)。
|
1 |
location ~* wp-config.php { deny all; } |
apacheの場合、WPルートにある.htaccessに下記を追記します。
|
1 2 3 4 |
<files wp-config.php> order allow,deny deny from all </files> |
xmlrpc.phpを無効化する(★★☆)
WordPressは3.5以降、デフォルトでXML-RPCの機能が有効になっています。これはpingbackやメール投稿などの機能をサポートするものですが、pingbackの悪用によりDoS攻撃の踏み台にされることがあります。これらの機能を使っていないのであれば、上記wp-config.phpを無効にする手順と同様に xmlrpc.php を無効にしてください。適切に設定がなされていれば、/xmlrpc.php へアクセスした際に403 Forbiddenが返されるはずです。
WordPressのバージョンを隠す(★☆☆)
WordPressで生成されたページのソースコードには、metaタグやcssのサフィックスとしてWordPressのバージョン番号が記載されています。バージョン番号が知られてしまうと、既知の脆弱性を用いた攻撃が容易となります。悪意のある攻撃者へ情報を与えないために、バージョン番号を出力しないようにしましょう。
これもプラグインを用いることで用意に実現できます。「Remove Version」というプラグインをインストールして有効化するだけで、ソースコードにバージョン番号が出力されなくなります。
readme.htmlを削除する(★☆☆)
インストールする際のreadme.htmlがルートディレクトリに残っていたりしませんか?このファイルにもWordPressのバージョン番号が含まれています。もし存在するようなら消しておきましょう。
テーブルのプレフィックスを変更する(★☆☆)
データベースのテーブルに割り当てられるプレフィックスです。もしデフォルトの wp_ を設定されているのであれば、これも別のものに変更されることをお勧めします。SQLインジェクションの対策になります。インストール済みのWPでプレフィックスを変更することも可能ですが、手を入れなければならない箇所が多く、長くなるので割愛します。
管理画面からソースコードの編集を禁止する(★☆☆)
wp-config.phpに次の行を追記することで、管理画面からテーマやプラグインのソースコードを編集できなくすることができます。
|
1 |
define('DISALLOW_FILE_EDIT', true); |
これは管理権限を持つユーザーの不正なコードの改竄を防ぐ効果があります。また、不正に第三者に管理画面にアクセスされた際にも限定的ながら有効です。
その他
- wp-adminのホスト制限
これも良い対策の一つですが、私の場合は外出先からでも執筆のためアクセスすることが多く、IPを固定できないため敢えて導入していません。その場合でも、国外からのアクセスなど出来るだけ絞り込むというのは十分にアリな対策です。
- HTTPS化
- DBユーザの権限設定
- ファイルパーミッション
- など
まとめ
いくつか対策を挙げてみました。WordPressを用いたサイトを運用する上での、セキュリティ対策の一助になれば幸いです。


