5つの必須事項:最初に行う
- WordPressのコア、テーマ、プラグインを最新に保つ。脆弱なプラグインは攻撃ベクトルの第1位です。マイナーバージョンの自動更新を有効にしてください(WordPress 5.6以降はデフォルトで行います)。メジャーバージョンは、リリース後7日以内に更新してください。プラグインは、信頼できるものの自動更新を有効にし、重要なプラグインのリリースノートは手動で確認してください。
- 各WordPressアカウントに強力で一意のパスワードを使う。特に管理者のものです。パスワードマネージャー(1Password、Bitwarden)を使ってください。「admin」というユーザー名を無効にしてください。新しい管理者を作成し、古いものを削除します。
- 二要素認証を有効にする。Wordfence Login Security(無料)または当サイトの2FA QRジェネレーターを任意のTOTPアプリで使ってください。2FAは認証情報スタッフィング攻撃の99%以上を打ち負かします。
- 信頼できるセキュリティプラグインをインストールする。Wordfence(無料版でほとんどのサイトに十分)またはSolid Security。複数を重ねないでください。競合します。プラグインはログイン試行の制限、ファイル整合性の監視、マルウェアスキャンを管理します。
- 毎日のサイト外バックアップ。UpdraftPlus→Dropbox/Google Drive。必要になる前にバックアップを取ってください。復元プロセスを少なくとも一度はテストしてください。
次の10個:追加の高インパクト対策
- HTTPSを強制する。Let's Encryptはあらゆる最新のホスティングで無料です。サーバーレベルでHTTPをHTTPSにリダイレクトしてください。
- データベースのテーブル接頭辞を変更する。WordPressはデフォルトでwp_を使います。インストール時にカスタムなものに変更してください。攻撃を防ぐわけではありませんが、一部の攻撃パターンを難しくします。
- 使っていないならXML-RPCを無効にする。XML-RPCは一般的なブルートフォース増幅のベクトルです。Jetpackのモバイルアプリやリモート投稿を使っていないなら、.htaccessまたはプラグインで無効にしてください。
- ログイン試行を制限する。Wordfenceが自動的に行います。ブルートフォースによる認証情報スタッフィングを防ぎます。
- WordPressの認証キー/saltをローテーションする。当サイトのWordPress Saltジェネレーターを使ってください。侵害が疑われた後、侵害された管理者を削除した後、そして日常的に6〜12か月ごとにローテーションしてください。
- ファイル転送にはプレーンFTPではなく、SSHまたはSFTPを使う。FTPは認証情報を平文で送信します。
- 可能ならIPでwp-adminへのアクセスを制限する。チームが固定IP(オフィス、VPN)を使うなら、wp-adminをそれらのIPだけに制限してください。.htaccessまたはNginxの設定で行います。
- wp-config.phpでファイル編集を無効にする。追加してください:
define('DISALLOW_FILE_EDIT', true);アカウントを侵害された場合に、攻撃者がダッシュボードからテーマ/プラグインを編集するのを防ぎます。 - WordPressのバージョン番号を隠す。meta generatorタグを削除します。攻撃を防ぐわけではありませんが、フィンガープリンティングを減らします。
- ファイルのパーミッションを固める。ファイルは644、ディレクトリは755、wp-config.phpは600。ほとんどのマネージドホスティングは自動的に行います。VPSでは明示的に設定してください。
仕上げ:良いが必須ではない
- カスタムのログインURL(例:WPS Hide Login)。主にボットトラフィックのノイズを減らします。本当のセキュリティではありません。
- ログインフォームのCAPTCHA。自動攻撃へのわずかな摩擦。
- /uploads/でのPHP実行を無効にする。アップロードされたPHPシェルの実行を防ぎます。
- CloudflareのWAF(無料層)を使う。悪意のあるトラフィックがサーバーに届く前にフィルタリングします。
- プラグイン/コアの更新に対する管理者メールアラートを設定する。
- HSTSプリロードを使い、ブラウザレベルでHTTPSを強制する。
- REST API経由のユーザー列挙を無効にする(Solid SecurityまたはWordfenceが管理します)。
- コンテンツセキュリティポリシー(CSP)ヘッダーを使う。
- ディレクトリのブラウジングを無効にする(ほとんどのホスティングはデフォルトで行います)。
- 外部サービスで稼働率+整合性を監視する(UptimeRobotの無料層+毎週のSucuri SiteCheck)。
- ユーザーの役割を最小権限に制限する。ほとんどの寄稿者は編集者レベルのアクセスを必要としません。
- データベースバックアップの暗号化(UpdraftPlus Premiumが提供します)。
- CDN経由でドメイン外に画像をホストする(攻撃対象領域を減らします)。
- セキュリティ監査ログの定期的なレビュー。
- サイトが大きな収益を生むなら、年次のペネトレーションテスト。
WordPressセキュリティの神話:省略する
強く推奨される「セキュリティ」対策のいくつかは、実際の保護をほとんど提供しません。(1)「WordPressのバージョンを隠す」:バージョンを知ることは標的型攻撃をわずかに助けますが、本当の解決策は更新であって、隠すことではありません。(2)「wp-config.phpをpublic_htmlの上に移動する」:本質的にセキュリティの利益はゼロです。ファイルはすでに.htaccessで保護されています。(3)「REST APIを無効にする」:多くのプラグインを壊し、ほとんど何もブロックしません。代わりに特定のエンドポイントを制限してください。(4)「複数のセキュリティプラグインを重ねる」:競合し重複します。信頼できる1つのプラグイン(WordfenceまたはSolid Security)が3つ分をカバーします。(5)「wp-login.phpの名前を変える」:隠ぺいによるセキュリティです。攻撃者はリダイレクトを通じて新しいURLを簡単に見つけます。
ハッキングされた場合:復旧チェックリスト
- パニックにならないこと。すぐに物を削除しないこと。まずフォレンジックのために現在の状態のスナップショットを取ってください。
- サイトをオフラインにする(メンテナンスモードプラグイン、または静的ページへの.htaccessリダイレクト)。
- すべての管理者パスワードを変更し、WordPressのsaltをローテーションする。
- ユーザーアカウントを監査する。認識できない管理者アカウントを直ちに削除します。
- Wordfence PremiumまたはSucuriでマルウェアをスキャンする。
- 現在のファイルをクリーンなWordPressのダウンロードと比較する。差分が変更されたコアファイルを明らかにします。
- データベースのwp_optionsテーブルで予期しないエントリを確認する(しばしば注入されたJSが含まれます)。
- 最新のクリーンなバックアップから復元する(毎日のバックアップが重要な理由がこれです)。
- 復元したら、各プラグインを監査する。使っていないものを削除し、すべてを更新し、公開CVEのあるものを置き換えます。
- WordPressのコアを最新バージョンに更新する。
- サイトを再び有効にし、30日間、再感染を監視する。