2026年5月31日

2026年5月31日

WordPressのwp-config.phpをセキュアに設定する方法

はじめに

「wp-config.phpの設定を見直してセキュリティを強化したい」「本番環境でWP_DEBUGがtrueになっていた」「wp-config.phpをドキュメントルート外に移動したい」——wp-config.phpはWordPressで最も重要な設定ファイルであり、適切な保護が必要です。

症状・原因

wp-config.phpにはデータベースパスワードや秘密鍵が含まれており、アクセス権が不適切だとサーバー侵害時に深刻な被害につながります。本番環境でWP_DEBUG=trueが設定されていると、エラーメッセージにデータベース情報やファイルパスが露出する場合があります。

解決手順

ステップ1:セキュリティキーと認証キーを更新する

// wp-config.php: WordPress秘密鍵(必ず一意のランダム値を設定)
// 新しい秘密鍵はこちらで生成: https://api.wordpress.org/secret-key/1.1/salt/

define( 'AUTH_KEY',         'ランダムな文字列(64文字以上推奨)' );
define( 'SECURE_AUTH_KEY',  'ランダムな文字列(64文字以上推奨)' );
define( 'LOGGED_IN_KEY',    'ランダムな文字列(64文字以上推奨)' );
define( 'NONCE_KEY',        'ランダムな文字列(64文字以上推奨)' );
define( 'AUTH_SALT',        'ランダムな文字列(64文字以上推奨)' );
define( 'SECURE_AUTH_SALT', 'ランダムな文字列(64文字以上推奨)' );
define( 'LOGGED_IN_SALT',   'ランダムな文字列(64文字以上推奨)' );
define( 'NONCE_SALT',       'ランダムな文字列(64文字以上推奨)' );

// 秘密鍵を変更すると既存のセッションがすべて無効になる(全ユーザーが強制ログアウト)
// 不正アクセス発覚後は直ちに更新すること

ステップ2:デバッグ設定を本番環境向けに調整する

// wp-config.php: 本番環境の推奨設定

// デバッグを完全に無効化(本番環境では必ずfalse)
define( 'WP_DEBUG',         false );
define( 'WP_DEBUG_LOG',     false );
define( 'WP_DEBUG_DISPLAY', false );
define( 'SCRIPT_DEBUG',     false );

// ========================
// 開発環境での設定例(本番環境では使わない)
// ========================
// define( 'WP_DEBUG',         true );
// define( 'WP_DEBUG_LOG',     true );  // /wp-content/debug.logに出力
// define( 'WP_DEBUG_DISPLAY', false ); // 画面には表示しない(ログにのみ記録)
// @ini_set( 'display_errors', 0 );

// エラーログをWordPress外のパスに変更(本番環境)
// @ini_set( 'error_log', '/var/log/php_errors.log' );

ステップ3:セキュリティ強化のための定数を設定する

// wp-config.php: セキュリティ強化定数

// 管理画面のテーマ・プラグインエディターを無効化
define( 'DISALLOW_FILE_EDIT', true );

// プラグイン・テーマのインストール・更新を管理画面から無効化
// (コアの自動更新は別設定で制御可能)
define( 'DISALLOW_FILE_MODS', true );

// WordPress管理画面からのコアの自動更新を制御
define( 'WP_AUTO_UPDATE_CORE', 'minor' ); // マイナーアップデートのみ自動(推奨)
// define( 'WP_AUTO_UPDATE_CORE', true );  // すべての更新を自動
// define( 'WP_AUTO_UPDATE_CORE', false ); // 自動更新を無効

// データベーステーブルプレフィックスをデフォルト以外に設定
// (新規インストール時に変更。既存サイトでの変更はDB直接変更が必要)
// $table_prefix = 'wp_';  ← これをユニークな値に変更
// $table_prefix = 'mysite_abc_';

// SSL/HTTPSを強制(管理画面とログインページ)
define( 'FORCE_SSL_ADMIN', true );

// 投稿リビジョンの保存数を制限(DBの肥大化防止)
define( 'WP_POST_REVISIONS', 5 );

// ゴミ箱を無効化(0)または日数を短縮
define( 'EMPTY_TRASH_DAYS', 7 ); // 7日でゴミ箱を自動削除

// メモリ制限の設定
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' ); // 管理画面用

// Cronを無効化してサーバーcronを使う場合
// define( 'DISABLE_WP_CRON', true );

// cookieドメインを明示的に設定
define( 'COOKIE_DOMAIN', 'example.com' );

ステップ4:wp-config.phpをドキュメントルート外に移動する

# wp-config.phpをWebからアクセスできない場所に移動する
# WordPressは自動的に1階層上のディレクトリを検索する

# 現在の構成:
# /var/www/html/wp-config.php  ← Webからアクセス可能(危険)
# /var/www/html/index.php

# 推奨構成:
# /var/www/wp-config.php       ← Webからアクセス不可(安全)
# /var/www/html/index.php

# 移動コマンド
mv /var/www/html/wp-config.php /var/www/wp-config.php

# WordPressは /var/www/html/ の1階層上 /var/www/ を自動検索する
# ただしシンボリックリンクやサーバー設定によっては動作しない場合がある

# .htaccessでwp-config.phpへのWebアクセスを明示的にブロック(移動しない場合)
# .htaccess: wp-config.phpへのHTTPアクセスを完全にブロック
<Files wp-config.php>
    Order Allow,Deny
    Deny from all
</Files>

# .htaccess自体へのアクセスもブロック
<Files .htaccess>
    Order Allow,Deny
    Deny from all
</Files>

# wp-includes ディレクトリ内のPHPファイルへの直接アクセスをブロック
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^wp-admin/includes/ - [F,L]
    RewriteRule !^wp-includes/ - [S=3]
    RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
    RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
    RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

ステップ5:ファイルパーミッションを正しく設定する

# wp-config.phpのパーミッションを400または440に設定
chmod 400 /var/www/html/wp-config.php
# 400: オーナーのみ読み取り可(最も安全)
# 440: オーナーとグループが読み取り可(PHPがグループ実行の場合)
# 644: 全員読み取り可(危険 - デフォルトから変更すること)

# .htaccessのパーミッション
chmod 444 /var/www/html/.htaccess

# WordPressのコアファイル・ディレクトリのパーミッション
find /var/www/html -type d -exec chmod 755 {} \;  # ディレクトリ: 755
find /var/www/html -type f -exec chmod 644 {} \;  # ファイル: 644

# wp-content/uploads のみ書き込み可能に
chmod -R 755 /var/www/html/wp-content/uploads/

# オーナーをWebサーバーユーザーに設定
chown -R www-data:www-data /var/www/html/
chown root:www-data /var/www/html/wp-config.php  # オーナーをrootに

注意事項

  • DISALLOW_FILE_MODS=trueを設定するとプラグイン・テーマの自動更新も無効になります。セキュリティアップデートを手動で適用するか、WP-CLIを使った自動更新スクリプトを別途用意してください。
  • 秘密鍵を変更するとすべてのユーザーが強制ログアウトされます。ECサイトなど常時ログインが必要なサイトでは、メンテナンス時間帯に変更してください。
  • $table_prefixwp_以外に変更するのは新規インストール時に行うのが最も安全です。既存サイトで変更するにはDBのテーブル名とオプション値を手動で変更する必要があります。

まとめ

wp-config.phpのセキュリティ強化は「秘密鍵をWordPressのジェネレーターで更新→本番環境ではWP_DEBUG=false→DISALLOW_FILE_EDITとFORCE_SSL_ADMINを有効化→wp-config.phpを1階層上に移動または.htaccessで保護→ファイルパーミッションを400に設定」の流れで整備します。関連記事:WordPressの不正ログインを防ぐ方法WordPressのファイルパーミッションを正しく設定する方法

お気軽にご相談ください

お見積りへ お問い合わせへ