WordPressは世界中で使われているCMSであるがゆえに、自動化された攻撃の標的になりやすいプラットフォームです。適切な設定をしないまま放置すると、不正ログイン・マルウェア設置・サイト改ざんのリスクがあります。ここでは優先度の高いセキュリティ対策をまとめます。
チェックリスト一覧
| 項目 | 優先度 | 方法 |
|---|---|---|
| WordPressバージョンを非表示にする | 高 | functions.php / プラグイン |
管理画面URL(/wp-admin)を変更する | 高 | プラグイン(WPS Hide Login等) |
| XML-RPCを無効化する | 高 | .htaccess |
| ログイン失敗回数を制限する | 高 | プラグイン(Limit Login Attempts等) |
管理者ユーザー名を admin 以外にする | 高 | 管理画面で変更 |
| ファイルエディタを無効化する | 中 | wp-config.php |
| REST APIのユーザー列挙を制限する | 中 | functions.php |
| セキュリティヘッダーを設定する | 中 | .htaccess |
| WP本体・プラグイン・テーマを最新に保つ | 高 | 管理画面で更新 |
| 不要なプラグインを削除する | 中 | 管理画面で削除 |
バージョン情報の非表示
WordPressのバージョンが外部から確認できると、既知の脆弱性を突いた攻撃の糸口になります。functions.php に以下を追加します。
// WordPressバージョン非表示
remove_action('wp_head', 'wp_generator');
RSSフィードや readme.html からも確認できる場合があります。readme.html はサーバーから削除するか、.htaccess でアクセスを拒否します。
<Files readme.html>
Order allow,deny
Deny from all
</Files>
## XML-RPCの無効化
XML-RPCは本来リモート投稿用の機能ですが、現在はJetpackや一部プラグイン以外ではほとんど使われません。ブルートフォース攻撃の踏み台にされやすいため、不要なら無効化します。
<Files xmlrpc.php>
Order allow,deny
Deny from all
</Files>
## ファイルエディタの無効化
管理画面からテーマ・プラグインのファイルを直接編集できる機能は、万が一管理画面に侵入された場合に悪用されます。wp-config.php に以下を追加して無効化します。
define('DISALLOW_FILE_EDIT', true);
## REST APIのユーザー列挙防止
/wp-json/wp/v2/users にアクセスすると管理者のユーザー名が取得できる場合があります。functions.php で制限できます。
add_filter('rest_endpoints', function($endpoints) {
if (isset($endpoints['/wp/v2/users'])) {
unset($endpoints['/wp/v2/users']);
}
if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
}
return $endpoints;
});
## よくある見落とし
- 管理者ユーザー名が
admin: インストール直後に変更を忘れがち。新しいユーザーを管理者権限で作成し、adminユーザーを削除する - プラグインの放置: 更新が止まっている・不要になったプラグインは削除する。非アクティブでも脆弱性の対象になる
- wp-config.php のパーミッション:
400または440に設定して書き込みを防ぐ - バックアップなしで設定変更:
.htaccessやfunctions.phpの誤記で動かなくなる可能性があるため、必ずバックアップを取ってから変更する
WordPressセキュリティチェックツールでは、外部からアクセスできるバージョン情報・XML-RPC・REST APIユーザー列挙など11項目を自動チェックできます。