WordPressセキュリティ強化チェックリスト — 乗っ取られる前にやる10項目
本記事はアフィリエイト広告(A8.net)を含みます。価格・仕様は2026年6月時点の目安です。最新は各公式サイトでご確認ください。
TL;DR
WordPressの乗っ取りは「特定のサイトを狙った高度な攻撃」より、自動化されたBotが脆弱なサイトを総当たりで踏み抜くケースが大半を占めます。逆に言えば、基本の10項目を潰しておけば被害確率は大きく下がります。本記事では、本体更新・管理者ユーザー名・2段階認証・wp-login保護・WAF・自動バックアップまで、改ざんされる前にやるべき対策を実務手順で解説します。
なぜWordPressが狙われるのか
WordPressは世界のWebサイトの約4割で使われているとされ(W3Techs調査)、シェアの大きさがそのまま攻撃対象の大きさになっています。攻撃者は1サイトずつ手作業で攻めるのではなく、Botで無数のサイトを巡回し、既知の穴が残っているものを機械的に踏み抜いていきます。
乗っ取られると起きること:
- 改ざん: トップページにスパムリンクや別サイトへのリダイレクトが埋め込まれ、検索順位とブランドが毀損する
- マルウェア配布の踏み台化: 訪問者にマルウェアを配るサイトと判定され、Google Safe Browsingでブロックされる
- スパムメール送信: サーバーが大量送信に使われ、IPがブラックリスト入りしてメール全般が届かなくなる
- 情報漏洩: 会員データ・問い合わせ内容・決済関連情報が抜かれる
復旧には、クリーンな環境への再構築・全パスワード変更・Google審査の再申請が必要になり、予防にかかる手間とは桁が違うコストが発生します。
チェックリスト全体像
まず全体を俯瞰します。上から順に重要度が高く、①〜④はどのサイトでも必須です。
| # | 対策 | 守るもの | 難易度 |
|---|---|---|---|
| ① | 本体・テーマ・プラグインの更新 | 既知脆弱性の悪用 | 低 |
| ② | 不要プラグイン・テーマの削除 | 攻撃面(attack surface) | 低 |
| ③ | 管理者ユーザー名をadminにしない | ブルートフォースの片側 | 低 |
| ④ | 強固なパスワード + 2段階認証 | 不正ログイン | 低 |
| ⑤ | wp-login / xmlrpc の保護 | 総当たり・増幅攻撃 | 中 |
| ⑥ | ファイル権限と wp-config 保護 | 設定情報の窃取 | 中 |
| ⑦ | WAF(Cloudflare / プラグイン) | 攻撃の手前での遮断 | 中 |
| ⑧ | 自動バックアップ | 復旧手段の確保 | 低 |
| ⑨ | SSL / HTTPS化 | 通信の盗聴・改ざん | 低 |
| ⑩ | 管理画面のアクセス制限 | 管理面への到達自体 | 中 |
① 本体・テーマ・プラグインを更新する
乗っ取りの最大の入口は「更新されずに放置された既知脆弱性」です。攻撃者は公開済みの脆弱性情報(CVE)を見て、対象バージョンが残っているサイトをBotで探します。更新を当てた瞬間に塞がる穴を、放置したせいで踏まれるのが最も多いパターンです。
- WordPress本体は自動更新(マイナーバージョン)が既定で有効。メジャーバージョンも管理画面で「自動更新を有効化」しておく
- プラグイン・テーマも個別に自動更新をONにできる(プラグイン一覧の各行「自動更新を有効化」リンク)
- 自動更新でレイアウト崩れが怖い場合は、ステージング環境で確認してから本番反映する運用にする
更新放置は最もコストが低く効果が高い対策です。最優先で潰します。
② 不要なプラグイン・テーマを削除する
「停止中だから安全」は誤りです。停止していてもファイルはサーバー上に残り、脆弱性があれば悪用され得ます。使っていないプラグイン・テーマは停止ではなく削除します。
- 管理画面の「プラグイン」で停止中のものを削除
- 「外観 > テーマ」でも、使っていないテーマを削除する。デフォルトテーマ(Twenty系)を1つだけ残し、ほかは消す
- プラグインは「多機能な1つ」より「必要十分な最小構成」を意識する。プラグインが増えるほど攻撃面が広がる
機能の足し算ではなく、攻撃面の引き算で考えるのがセキュリティの基本です。
③ 管理者ユーザー名を「admin」にしない
ブルートフォースは「ユーザー名」と「パスワード」の2つを当てる作業です。ユーザー名がadminだと、攻撃者は片側を当てる手間が消え、パスワードだけ総当たりすればよくなります。
- 新規にカスタム名の管理者ユーザーを作成 → そのユーザーでログインし直す → 元の
adminユーザーを削除(投稿は新ユーザーに引き継ぐ) - 投稿者アーカイブのURL(
?author=1)からログイン名が露出することがある。表示名(ニックネーム)とログイン名を別にしておく - ログイン名の推測を避けるため、公開される「表示名」をログインIDと一致させない
④ 強固なパスワード + 2段階認証
パスワードは「長さ」が最も効きます。複雑な記号より、十分に長くランダムな文字列のほうが現実的な強度を持ちます。
- パスワードマネージャーで20文字以上のランダム文字列を生成し、使い回さない
- そのうえで2段階認証(2FA)を必須化する。WordPressでは「WP 2FA」「Two-Factor」などのプラグインで認証アプリ(TOTP)を有効化できる
- フィッシング耐性まで求めるなら、TOTPよりFIDO2セキュリティキーが強い。仕組みはフィッシング耐性のある2FA・FIDO2セキュリティキー解説を参照
パスワードが漏れても、2FAがあれば不正ログインを止められます。管理者アカウントには必ず設定します。
⑤ wp-login.php と xmlrpc.php を保護する
wp-login.phpはログイン総当たりの標的、xmlrpc.phpはかつてブルートフォース増幅やpingback悪用に使われてきたエンドポイントです。使っていないなら閉じる、使うなら絞るのが原則です。
xmlrpc.php
Jetpackやモバイルアプリ連携などで必要な場合を除き、多くのサイトでは不要です。不要なら無効化します。
- 「Disable XML-RPC」系プラグインで無効化する方法が手軽
- サーバーで直接遮断する場合、Apache(
.htaccess)では次のように拒否できます
# xmlrpc.php へのアクセスを全拒否(.htaccess)
<Files xmlrpc.php>
Require all denied
</Files>
Nginxならlocation = /xmlrpc.php { deny all; }で同等のことができます。
wp-login.php
ログインページはレート制限・IP制限で守ります。
- 「Limit Login Attempts Reloaded」などのプラグインで、一定回数失敗したIPを一時ロックアウトする
- 管理アクセスが固定IPからのみなら、
.htaccessやWAFでログインページを自IPに限定する(⑩で後述) - 上位の防御としてCloudflareのRate Limitingでログインパスに閾値を設ける方法もあります(Cloudflare WAFで悪質Botをブロックする設定)
⑥ ファイル権限と wp-config.php の保護
wp-config.phpにはDB接続情報と認証用のシークレットキーが入っています。ここが読まれると被害が一気に深刻化します。
推奨パーミッション
| 対象 | 推奨権限 | 補足 |
|---|---|---|
| ディレクトリ全般 | 755 | 書き込みは所有者のみ |
| ファイル全般 | 644 | 同上 |
| wp-config.php | 600 または 640 | より厳しく絞る |
権限は環境(サーバーのユーザー構成)により最適値が変わるため、共有レンタルサーバーではホスティング側の推奨値に従ってください。誤って厳しすぎる権限にするとサイトが動かなくなります。
wp-config.php への直接アクセスを拒否(Apache)
<Files wp-config.php>
Require all denied
</Files>
加えて、認証用シークレットキー(SALT)はWordPress公式のシークレットキー生成サービスで生成した値に設定しておきます。
⑦ WAF(Cloudflare / プラグイン)を入れる
WAF(Web Application Firewall)は、攻撃リクエストがWordPressに届く手前で遮断する層です。①〜⑥がサイト内部の戸締まりだとすれば、WAFは敷地の外周フェンスにあたります。
- Cloudflare: DNSをCloudflare経由にすると、無料プランでも基本的なマネージドルールとBot対策が使えます。WordPress向けのカスタムルール例はCloudflare WAFの設定記事を参照
- プラグイン型WAF: 「Wordfence」「SiteGuard WP Plugin」など。サーバー単独運用でも導入しやすい
- 両方を併用する場合、二重チャレンジで正規ユーザーを巻き込まないよう、まず緩い設定から始めてログで誤検知を確認する
ネットワーク層(Cloudflare)とアプリ層(プラグイン)は守る範囲が異なるため、可能なら組み合わせると堅くなります。
⑧ 自動バックアップを取る
どれだけ防御しても侵入確率はゼロにはなりません。復旧できる状態を常に持っておくことが、最後の保険になります。
- 「UpdraftPlus」「BackWPup」などで、データベースとファイルを定期自動バックアップする
- 保存先はサーバー内ではなく外部(クラウドストレージ等)にする。サーバーごと侵害された場合、同一サーバー上のバックアップは信用できないため
- 取得して終わりにせず、復元テストを一度は実行しておく。復元できないバックアップは無いのと同じです
- バックアップの頻度は更新頻度に合わせる(毎日更新するサイトなら日次)
⑨ SSL / HTTPS化する
通信の暗号化は今や前提です。HTTPのままだとログイン情報が平文で流れ、公衆Wi-Fiなどで盗聴されるリスクが残ります。
- 多くのレンタルサーバーは無料SSL(Let’s Encrypt)を管理画面から有効化できます
- 自前サーバーの場合はCertbotで取得・自動更新を設定します(Let’s Encryptで無料HTTPSを設定する手順)
- HTTPS化後は、WordPressの「設定 > 一般」でサイトURLを
https://に統一し、混在コンテンツ(HTTP読み込み)を解消する
⑩ 管理画面(wp-admin)のアクセスを制限する
ログイン突破を試みる前に、そもそも管理画面に到達させないのが最も確実です。固定IPで運用できるなら、IP制限が効果的です。
Apache(.htaccess)でのIP制限例
# wp-admin を特定IPのみ許可(.htaccess を wp-admin/ 配下に設置)
Require all denied
Require ip 203.0.113.10
203.0.113.10を自分の固定IPに置き換えます。複数拠点ならRequire ipを行で追加します。
- 固定IPがない環境では、IP制限の代わりにBasic認証(
.htpasswd)でwp-adminに二重ロックをかける方法があります - ログインURL自体を変更する「SiteGuard WP Plugin」等の手法もありますが、これは「隠す」だけで根本対策ではないため、④⑤と併用が前提です
まとめ
| 対策 | 効果 | まず最初にやるなら |
|---|---|---|
| ① 更新の徹底 | 既知脆弱性を塞ぐ(最重要) | ◯ |
| ② 不要プラグイン削除 | 攻撃面を減らす | ◯ |
| ③ admin名を使わない | 総当たりの片側を消す | ◯ |
| ④ 強固なPW + 2FA | 不正ログインを止める | ◯ |
| ⑤ wp-login/xmlrpc保護 | 総当たり・増幅を遮断 | |
| ⑥ 権限とwp-config保護 | 設定情報の窃取を防ぐ | |
| ⑦ WAF | 攻撃を手前で遮断 | |
| ⑧ 自動バックアップ | 復旧手段を確保 | ◯ |
| ⑨ SSL/HTTPS | 通信の盗聴を防ぐ | ◯ |
| ⑩ wp-admin制限 | 管理面への到達を断つ |
セキュリティは「一度設定して終わり」ではなく、更新とログ確認を回し続ける運用です。まずは①〜④と⑧、⑨という低難易度・高効果の項目を当日中に潰し、⑤〜⑦⑩を順に締めていくのが現実的な進め方です。
各サービス公式
土台になるホスティング自体が高速で堅牢だと、セキュリティ運用の前提が安定します。表示速度と安定性で評価が高い高速ホスティングとしてmixhostがあります。![]()
テーマ起因の脆弱性を避けるには、更新が継続している有料テーマを選ぶのも有効です。国産でSEO・更新サポートに定評のあるWordPress 有料テーマ Emanonは選択肢の一つです。![]()