.htaccessに6行追加するだけでWordPressのREST API無効化

.htaccessに6行追加するだけでWordPressのREST APIを無効化することができます。

追記:コメントにてご指摘いただき、index.php?rest_route=/にアクセスされた際の処理も加えました。1行から6行に変更になりました。

広告 (下に続く)

REST APIとは

REST APIとはものすごく簡単に言うとシンプルなデータ送信で様々なことが出来るような設計を行ったインターフェイスをいいます。WordPressではWordPress 4.7.0からREST API機能を搭載しましたが脆弱性が判明し話題になりました。

WordPress の脆弱性対策について:IPA 独立行政法人 情報処理推進機構
情報セキュリティ関連情報のユーザー、管理者、技術者に向けた発信、その前提となる情報収集、調査分析、研究開発、技術評価等の実施

正直ほとんどのユーザーはREST APIを使うことがないでしょう。使用しないのであればREST APIを無効化するとアクセスするための侵入経路が減ることになるのでセキュリティの向上が期待できます。

広告 (下に続く)

無効にする方法

REST APIを無効化する方法として「Disable REST API」プラグインがあります。しかし、REST API自体にはアクセスが出来る上、プラグインに不具合がある可能性が否定できないので心配です。そこで、.htaccessを用いてREST APIにアクセスできないようにしてしまいましょう。

WordPressの初期設定では次のような.htaccessが記載されていると思います。

# BEGIN WordPress
<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule . /index.php [L]
</IfModule>
# END WordPress

ここで、REST APIにアクセスするために用いるURL /wp-json/ 以下及び /index.php?rest_route=/ ではWordPressを起動しないようにします。次のように追加してください。

# BEGIN WordPress
<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_URI} !^/wp-json/
 RewriteRule . /index.php [L]
</IfModule>
# END WordPress

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{QUERY_STRING} rest_route=
 RewriteRule ^$ /? [R=404,L]
</IfModule>

広告 (下に続く)

結果

導入前

「Disable REST API」プラグインのみを入れた状態ではWordPressが起動し、REST APIが無効であるとの結果が返されます。

導入後

WordPressが起動せず、Apacheにてファイルが存在しないことが確認され、404エラーが返されます。

また、PHPクエリで直接アクセスしても同様です。

シェアする