.htaccessにコードを追記してWordPressセキュリティを高める



WordPress はブルートフォースが異様に多いので、しっかり対策することが大切です。

.htaccess を触りたくない場合は「プラグインを使う」ことも可能ですが、
プラグインの不具合の方が100倍大変なので .htaccess を覚えた方が楽です。

.htaccessがある場所と書き方

.htaccessファイルを守る

これは基本ですね。

Apache 2.4 の書き方(現在)

<Files ".ht*">
Require all denied
</Files>

Apache 2.2 の書き方(以前)

<Files ".ht*">
deny from all
</Files>

※Apache 2.4 から「Allow」「Deny」「Order」「Satisfy」ディレクティブは非推奨

wp-config

Apache 2.4 の書き方

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

Apache 2.2 の書き方

<Files wp-config.php>
Order allow,
deny Deny from all
</Files>

wlwmanifest.xml

このファイルはメチャクチャ狙われます。

/wp-includes/wlwmanifest.xml

Windows Live Writer で投稿していないのであれば追記オススメ。

<Files wlwmanifest.xml>
Require all denied
</Files>

xmlrpc.php

スマホアプリから WordPress を投稿しないのであれば無効にしておくと安心。
ただし、プラグイン Jetpackや Akismet と干渉し合うことがあるので注意が必要。

.htaccess に以下のコードを追記します。

RewriteRule ^xmlrpc\.php$ http\:\/\/0\.0\.0\.0 [R=301,L]

もしくはこれを追記します。ご自分が分かりやすい方で。

<IfModule mod_rewrite.c>
RewriteRule ^xmlrpc\.php$ "http\:\/\/0\.0\.0\.0\/" [R=301,L]
</IfModule>

アプリなどで記事投稿を行っている場合は(XML-RPC)IP アドレスを指定すると安心。

<Files xmlrpc.php>
Require all denied
Require ip 自分のIPアドレス
</Files>

install.php

<Files install.php>
Require all denied
</Files>

設定していない場合は、アクセスするとこのような画面が表示されるのでとてもよろしくありません。

wp-cron.php

予約投稿を行っている場合は追記しない方が良いかと。

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

error_log

<Files error_log>
Require all denied
</Files>

php.ini

<Files php.ini>
Require all denied
</Files>

wp-includes

PHP との互換性の問題などが生じると、ファイルにアクセスされた時にエラー内容と共にユーザー名が表示されてしまいます。


wp-includes にアクセスされた時に 403 エラーで返すようにします。

# Block the include-only files.
# NO wp-include
<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]
RewriteRule ^wp-includes/blocks/ - [F,L]
</IfModule>

マルチサイトの場合はこの行を削除します。

RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]

参照:WordPress の安全性を高める – WordPress Codex 日本語版

プラグインによっては wp-includes をアクセス拒否にするとサイトが動かなくなる場合があります。
その場合は、除外設定を行います。

参照:公開不要なページ・ファイルを制御しよう

また、WordPress のアップデートにより、wp-includes 内に新しいフォルダーを設置されるとエラーが表示される(ユーザー名が表示される)場合もあるので定期的な見直しが必要です。

実際にアクセスして確認する

ファイルにアクセスした時に「404 Not Found」や「403」で返しているか確認します。

  • /error_log
  • /log
  • /php.ini
  • /.htaccess
  • /wp-admin/install.php
  • /wp-config.php
  • /wp-cron.php
  • /wp-includes
  • /wp-includes/wlwmanifest.xml
  • /wp-mail.php
  • /xmlrpc.php

ディレクトリーを表示させない

.htaccess の末尾に追記するのが良いそうです。

# ディレクトリ一覧の非表示
Options -Indexes

ユーザー名を隠す

トップページにリダイレクト

「サイトURL/?author=1」でアクセスされた場合、ユーザー名は表示せずトップページにリダイレクトします。

# Redirect username
RewriteEngine On
RewriteRule ^\?author=(.*)? / [R=302,L]
RewriteRule ^author/(.*)? / [R=302,L]

IPアドレスで制御

ログインする際の IPアドレス を設定しておくと、他の場所からはログイン画面を開くことすらできなくなります。これはぜひ設定しておきたいですね。

<Files wp-login.php>
Require all denied
Require ip 自分のアドレス
</Files>

wp-adminもIPアドレスで制御

※これはやらなくても良いかも※
エディタを開いたらこのように記述し .htaccess ファイルを作成したら「wp-admin」に設置します。

WordPress のログイン URL を変更して 404 エラーで返す
ユーザー名は nicename を変更すると完璧に隠せる

リダイレクト

.htaccess で http から https へ 301 リダイレクトする方法

直リンクを防ぐ

.htaccess を編集して直リンクを禁止

併せて設定しておきたい

ファイルパーミッションを変更してセキュリティを高める

参照:WordPress.org 日本語