WP CerberでREST APIを無効にできない件について
WP Cerber SecurityでREST APIを制限する設定を行ったにも関わらず「/wp-json/wp/v2/users」にアクセスできてしまう事象です。他のREST APIのURLにもアクセスできてしまいます。
本来は以下の403エラーが出ます。
執筆時点の以下の環境で確認しました。
- Nginx 1.20
- WordPress 5.8.1
- PHP 8.0.12
- WP Cerber Security 8.9.3
WP Cerberの設定
画像の通り、以下が全てONになっている状態です。
- REST API を介したユーザーのデータへのアクセスをブロックする
- 次のいずれか以外の WordPress REST API へのアクセスをブロック
- ログインユーザーに REST API を許可
また、[メイン設定]にある[セキュリティエンジンのロード]は通常モードになっています。
対処法
結論から述べると、Nginxのconfファイルのserverブロックに以下を記述することで解決しました。
location ^~ /wp-json/ {
rewrite ^/wp-json/(.*) /index.php?rest_route=/$1 last;
}
上記を記述することで「/wp-json/」や「/wp-json/wp/v2/users」にアクセスした際に403ページが表示されます。
修正内容について
「/wp-json/wp/v2/users」でアクセスできてしまっていたのですが、「?rest_route=/wp/v2/users」でアクセスすると期待通り403ページが返ってくる状態でした。なので/wp-json/xxx/を?rest_route=/xxx/に書き換えることで対応しています。
なお、WP CerberにはREST APIが有効になる条件があります。
- 管理者としてログインしていること
- 自分のIPアドレスをホワイトIPアクセスリストに入れていること
- (ロールを設定している場合)管理者以外のロールのユーザーでログインしていること
その他、名前空間に該当するREST APIである場合は有効する設定がありますが、「/wp-json/wp/v2/users」には適用されません(明記されてはいませんが)。
一見アクセスできてしまうように見えても、上記の条件に当てはまっている可能性があります。
本当にアクセスできない設定になっているか否かは以下の手順を踏んで確認してください。
- ホワイトIPアクセスリストから自分のIPアドレスを削除
- ブラウザのシークレットウィンドウを立ち上げてアクセス
あとがき
NginxのFastCGI Cacheとかも疑って消してみたりしていたのですが、好転しませんでした。
WP Cerberのフォーラムなどを検索してもこのような現象は見られなかったため、環境固有の問題と思われます。何が悪さをしているか分からなかったのでとりあえず備忘録として残します。