2026年9月5日
2026年9月5日
WordPressのアップロードフォルダのPHP実行を禁止する方法
はじめに
サイトのセキュリティを確保するために、アップロードされたファイルが意図しないスクリプト実行や悪意のあるアクションから保護する必要があります。特に、アップロードフォルダ(通常はwp-content/uploads/)へのアクセス制限を適切に行うことで、ウェブサイトの安全性を大幅に向上させることが可能です。
症状・背景
このテーマが必要になる主な場面:
- アップロードフォルダ内に悪意のあるスクリプトが存在する場合
- 通常ファイルとして扱われるべきものが実行可能である場合
- Webサーバー設定を強化したいとき
手順・設定方法
ステップ1: アクセス権限の変更
まず、アップロードフォルダの所有者とグループを変更します。
# WordPressユーザーにフォルダオーナーを変更
sudo chown -R www-data:www-data /var/www/html/wp-content/uploads/
# アクセス権限を750に設定
sudo chmod 750 /var/www/html/wp-content/uploads/
ステップ2: Apacheの設定ファイルを編集
次に、Apacheの設定ファイル(/etc/apache2/apache2.conf)を編集し、アップロードフォルダでのPHP実行を禁止します。
# PHPファイルの処理を無効にするディレクティブを追加
sudo nano /etc/apache2/apache2.conf
<Directory /var/www/html/wp-content/uploads/>
<FilesMatch "\.ph(p[345]?|t|tml)$">
SetHandler None
</FilesMatch>
</Directory>
ステップ3: Nginxの設定ファイルを編集
同様に、Nginxを使用している場合は、/etc/nginx/sites-available/defaultファイルを開き、PHP実行を禁止する設定を行います。
# Nginxのアップロードフォルダ設定部分に以下を追加
sudo nano /etc/nginx/sites-available/default
location ~* ^/wp-content/uploads/.+\.(ph(p|tml))$ {
deny all;
}
ステップ4: ファイアウォールやセキュリティソフトウェアの調整
最後に、ファイアウォール設定を確認し、必要であれば追加のアクセス制限を設けます。
# UFWルールで特定のポートを閉じる場合
sudo ufw deny 80/tcp
注意事項
- 設定変更後は必ずWebサーバーを再起動します。
- WordPressのアップロード機能が正常に動作するよう、適切なアクセス権限と所有者設定を行ってください。
- サービスやソフトウェアの更新により設定が上書きされる可能性があるため、常に最新情報を確認してください。
- すべての設定変更はバックアップを取ることを強く推奨します。
まとめ
1. アクセス権限: アップロードフォルダの所有者とグループを適切に設定し、アクセス権限を制限する。
2. Apache/Nginx設定 : Webサーバーの設定ファイルを編集してPHP実行を禁止する。
3. ファイアウォール/セキュリティソフトウェア: 必要なポートや機能に対するアクセスを厳しく管理する。
4. テストと監視: 設定変更後は、正常に動作することを確認し、定期的なメンテナンスを行う。
関連記事: