wp-config.phpのセキュリティ:WordPressの保護を強化する

公正取引委員会の広告文 Ver 3.1
公正取引委員会の広告文 Ver 3.2(モバイル専用)

viでwp-config.phpを開いている間、同じフォルダにできたスワップファイル(.swp)がWebのアドレスからそのまま開ける状態になっていたことがあります。2026-09-13にこのサイトで実際に確認したもので、そのコピーにはデータベースのパスワードとセキュリティキーがすべて入っていました。

wp-config.phpのセキュリティは、下の6つを上から順に確認します。

1️⃣ wp-config.phpが露出すると起きること

wp-config.phpには、データベース名・ユーザー・パスワードと、ログインCookieを暗号化するセキュリティキー8個が入っています。

WordPressのwp-config.phpファイル

このファイルが外部に露出すると、攻撃者がデータベースに直接接続したり、セキュリティキーでログインセッションを偽造して管理者権限を奪ったりできます。

2️⃣ ファイル権限を600に制限する

WordPressでは通常、フォルダを755、ファイルを644にしますが、wp-config.phpは所有者だけが読み書きできる600に制限します。テストサイトtestpilotweb.comで実行したコマンドです。

chmod 600 /home/testpilotweb/www/wp-config.php
stat -c '%a %U' /home/testpilotweb/www/wp-config.php
600 testpilotweb

PHPがファイルの所有者と別のアカウントで動くサーバーでは、600にするとWordPressがこのファイルを読めず、サイトが開きません。testpilotweb.comはPHP-FPMが所有者と同じアカウントで動いているため、変更後も正常に開きました。

SSHを使えない共有ホスティングでは、FTPソフトやcPanelファイルマネージャーの権限メニューで同じ値に変更します。

3️⃣ Webサーバーでアクセスを遮断する

権限を変更できない場合や、もう一層守っておきたい場合は、Webサーバーにwp-config.phpへのリクエストそのものを拒否させます。

🔲 Apache(.htaccess)

<Files wp-config.php>
    Require all denied
</Files>

古い記事でよく見る[order allow,deny]・[deny from all]はApache 2.2の書き方です。Apache 2.4では互換モジュール(mod_access_compat)が有効なときだけ動作します。

🔲 nginx

nginxは.htaccessを読まないため、サーバー設定ファイルに[location]ルールを追加します。このサイトも同じ方法で403を返しています。

location ~* /wp-config(-sample)?\.php$ {
    deny all;
}

正規表現のドットは[\.]とエスケープします。ドットをそのままにすると[/wp-config-php-기본-설정/]のような記事のURLまで遮断され、このサイトでも同じミスで記事が403になったことがあります。

4️⃣ エディタの一時ファイル・バックアップファイルを遮断する

viでファイルを開いている間にできる[.swp]のコピーや、編集前に残した[.bak]のコピーはPHPとして実行されず、文字のまま送信されます。

nginxでは両方をまとめて遮断します。[444]は応答せずに接続を閉じるnginx独自のコードです。

location ~ \.sw[opx]$ { return 444; }
location ~* (\.(bak|orig|old|save)|_ori|\.bak\.[0-9]+)$ { return 444; }

5️⃣ Webルートの一つ上に移す

WordPressはwp-config.phpをまずインストールフォルダで探し、なければすぐ上のフォルダから読み込みます。ファイルを[public_html]の外へ一つ上に移せば、Webのアドレスからはアクセスできなくなります。

ただし、上のフォルダに別のWordPressの[wp-settings.php]があると、WordPressはそのフォルダのwp-config.phpを読み込みません。移した後は、サイトと管理画面が開くかすぐに確認します。

6️⃣ ファイル編集を無効にする

WordPressダッシュボードの 「テーマファイルエディター」 および 「プラグインファイルエディター」 メニューを無効にします。攻撃者が管理者権限を奪っても、ブラウザから悪意のあるコードを書き込む経路を断つ、最も効果的な防御策の一つです。

define('DISALLOW_FILE_EDIT', true);	

7️⃣ wp-config-sample.phpを削除する

wp-config-sample.phpはインストール時に使う見本ファイルなので、インストールが終われば削除して構いません。機密情報は入っていませんが、攻撃者が既定のパスで探すファイルなので残しておく理由はありません。

サンプルファイルの実際の行と項目ごとの意味は、 wp-config.phpの基本設定 の記事にまとめています。削除せずに残す場合は、上のnginxルールの[(-sample)?]の部分がこのファイルも一緒に遮断します。

WordPress Box

ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

人間であることを証明してください: 1   +   2   =