.htaccessでPHP実行とディレクトリリスティングを無効化してWordPressのセキュリティを強化する方法
WordPressのファイルやディレクトリの設定は、サイトのセキュリティを維持する上で極めて重要な役割を果たします。WordPressをインストールした直後に真っ先に取り組むべき作業の一つが、これらの適切な設定です。どのファイルを誰が閲覧できるのか、ユーザーにどんな操作を許可するのかを正しく管理することで、サイトのセキュリティ体制は大幅に向上します。本記事では、PHPの実行とディレクトリリスティング(ディレクトリの参照)を無効にすることで、サイトの安全性を高める方法を詳しく解説します。
PHPの実行を無効にする理由と方法
WordPressの「uploads」フォルダやテーマ、プラグインの各フォルダは、デフォルトで書き込み可能な状態になっています。この権限設定があるからこそ、ユーザーはサイトに画像や動画をアップロードしたり、テーマやプラグインをインストールしたりできます。プラグインやテーマを追加するたびに新しいファイルがそれぞれのフォルダに保存されるのも、これらのフォルダが書き込み可能であるためです。
多くの人がWordPressでサイトを構築する理由の一つは、テーマやプラグインを使って手軽にカスタマイズできる点にあります。しかし残念ながら、この便利な権限設定は同時に、フィッシング攻撃、SEOスパム、ブルートフォース攻撃といったハッキングのリスクも生み出します。攻撃者はこの仕組みを悪用し、悪意のあるスクリプトをアップロードして遠隔から実行しようとします。最悪の場合、サイトへの完全なアクセス権を奪われたり、Webサイト自体を破壊されたりする恐れもあります。
実際に発生した事例としては「MailPoetハッック」が挙げられます。攻撃者はUploadsフォルダへ悪意あるPHPコードをアップロードし、それを実行することでサイトの乗っ取りに成功しました。
書き込み権限を丸ごと削除すればリスクは減りますが、そうすると画像のアップロードも、テーマやプラグインのインストールもできなくなってしまいます。そこで有効なのが、PHPの実行のみを無効化して攻撃の成功率を下げるという対策です。特定のフォルダにおける「実行」権限だけを取り消すことができます。
PHPの実行を無効にする最もシンプルな方法は、対象フォルダ内の.htaccessファイルに専用のコードを追記することです。
注意: ファイルを編集する前に、必ずサイト全体のバックアップを取得してください。以下の手順で一つでもミスをすると、サイトが壊れたり予期しない不具合が発生したりする可能性があります。バックアップがあれば、問題が起きた際にも正常な状態へ素早く復元できます。
ステップ1: UploadsフォルダでPHPの実行を無効にするには、まずそのフォルダ内に.htaccessファイルを作成します。フォルダはpublic_html配下のwp-content内にあります。
ステップ2: Windowsならメモ帳、MacならTextEditを開いて新規ファイルを作成します。標準的なWordPress環境では、.htaccessに以下のリライトルールが含まれています。コードを貼り付けたら、「.htaccess」という名前で保存してください(.htaccess.txt とならないよう注意が必要です)。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
ステップ3: コードを保存したら、そのファイルをUploadsフォルダへアップロードします。
ステップ4: Uploadsフォルダに新しい.htaccessファイルが設置できました。ファイルを右クリックして「編集」を選択し、以下のコードを追記します。
<FilesMatch "\.(php|php\.)$"> Order Allow,Deny Deny from all </FilesMatch>
下の画像は、実際に.htaccessファイルへコードを記述した例です。
この設定により、拡張子に「php」を含むすべてのファイルが検出され、実行が阻止されます。仮に攻撃者が「maliciousPHPFileDisguisedAsJPEGfile.php.jpg」のような偽装ファイルをアップロードしても、実行はブロックされます。
さらにセキュリティを高めたい場合は、pluginsフォルダやthemesフォルダの.htaccessファイルにも同じコードを追加しておきましょう。
手動でのPHP実行無効化には多少のリスクが伴います。ファイルマネージャーの操作には細心の注意が必要で、ひとつ間違えればサイトに深刻なダメージを与えかねません。より安全かつ簡単なのは、プラグインを利用する方法です。セキュリティサービス「MalCare」にはサイト強化(Site Hardening)機能が搭載されており、ワンクリックでPHP実行をブロックできます。
この機能を有効化するには、FTP接続情報が必要となります。
PHP実行の無効化だけでサイトはかなり堅牢になりますが、さらに一歩進めて、ディレクトリリスティングも無効にしておくことをおすすめします。
ディレクトリリスティングを無効にする理由と方法
WordPressサイトによっては、訪問者がディレクトリの中身を簡単に閲覧できてしまうことがあります。たとえば、ブラウザで「https://example.com/wp-includes/」のようにURLを直接開くと、wp-includesフォルダ内のファイル一覧が表示されてしまうケースがあるのです。
一見無害に思えますが、ディレクトリリスティングは機密性の高い情報を露呈させ、攻撃者にサイト侵入の手がかりを与えてしまいます。そのため、一覧は非表示にすべきです。「隠蔽によるセキュリティ(security by obscurity)」は一般的には推奨されませんが、できる限り情報を見せないことは重要です。攻撃者に知られる情報が少ないほど、攻撃を受ける可能性も下がります。
サイトのセキュリティを強化するため、以下のコードを.htaccessファイルに追加してディレクトリリスティングを無効にしました。
.htaccessファイルを編集する前には、必ずサイトのバックアップを取りましょう。ほんの小さなミスでも、サイトに大きな問題を引き起こす可能性があります。バックアップがあれば、トラブル発生時にも正常な状態へすぐに戻せます。
また、閲覧を禁止したいディレクトリ自身の.htaccessファイルを編集する点にも注意してください。たとえばwp-includesフォルダを保護したい場合は、そのフォルダ内の.htaccessファイルに次の1行を記述します。
Options All -Indexes
コードを保存後、改めてディレクトリ一覧へアクセスしてみると、403エラー(Forbidden)ページが表示されるようになりました。
まとめ
PHP実行とディレクトリリスティングの無効化は、確実にWebサイトのセキュリティ向上につながります。しかし、これはWordPressサイトをハッキングから守る数ある対策のうちの一つにすぎません。その他にも、セキュリティプラグインの導入、SSL証明書の常時HTTPS化、固有かつ強力なユーザー名とパスワードの設定、HTTP認証や二要素認証(2FA)の導入など、複数の対策を組み合わせることで、より強固な防御体制を築くことができます。
-
PHPコード実行攻撃の脅威にさらされるWordPressサイト|未完了インストールが招く深刻なリスク
WordPressは、大規模なユーザーベースと多彩な機能を備えていることから、古くからインターネット上の詐欺師たちの格好の標的となってきました。脆弱なプラグインの使用、最新バージョンへの未更新、セキュリティパッチの不定期な適用、セキュリティ対策への怠慢などが、WordPressサイトへの大量攻撃を引き起こす主な要因です。 インストールが未完了のまま放置されたWordPress環境は、世界で最も人気のあるCMSをPHPコードインジェクション攻撃に対して脆弱なものにしています。2017年6月には720万件を超える攻撃が確認されました。このコードインジェクション攻撃キャンペーンは、特に5月から6月に
-
Google Chromeが「混合コンテンツ」をブロックへ――ブラウジングセキュリティ強化の全貌を徹底解説
Googleはユーザーのセキュリティとプライバシー保護に向けて、厳格な対策を進めています。最近では、YouTubeやMaps、Googleアシスタントの音声コマンドに関する検索を保護する新しいプライバシー機能が発表されたばかりです。そして今度は、Chromeのブラウジングセッションにおける「混合コンテンツ(Mixed Content)」のブロックによって、ユーザー保護を一段と強化しようとしています。Googleでは、検索結果の上位に表示されるサイトにはSSL証明書が導入され、サーバーがHTTPSという安全な通信プロトコルで動作していることを保証しています。 しかし、サイバー犯罪の増加や過去に