Nginx で WordPress REST API へのアクセス制限

この記事は公開されてから半年以上経過しています (公開日2017年2月11日)。

久しぶりに WordPress に大きな脆弱性が公開されました。
WordPress 4.7 と 4.7.1 の REST API に認証を回避してコンテンツを書き換えられる脆弱性が存在します。攻撃は容易で、攻撃が成立するとコンテンツの書き換えが実行可能なため影響は大きいです。

技術的な検証と考察については以下の記事を参考にしてください。

REST APIへのアクセス制限

REST API は WordPress 4.6 まではプラグインで利用可能でしたが、 WordPress 4.7 から標準機能として搭載されました。
WordPressをアップデートすると今回の脆弱性を回避できますが、それでも現状REST APIへのアクセス自体はどこからでもできてしまう状態で、REST APIを無効化するにもプラグインが必要なので、Nginx側でアクセス制限してしまいます。

以下は Nginx で /wp-json へのアクセスを IP で制限する設定例です。

    location ~ wp-json {
        # REST APIへアクセスするIPを許可
        allow xxx.xxx.xxx.xxx;
        allow 127.0.0.1;
        # 上記以外全部拒否
        deny all;
        try_files $uri @wordpress;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_pass php-fpm-socket;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        index index.php;
    }

    location @wordpress {
        fastcgi_index index.php;
        fastcgi_pass php-fpm-socket;
        rewrite ^ /index.php last;
        include       fastcgi_params;
    }

まとめ

WordPress 4.7 では REST API の機能が標準搭載されてます。WordPress 4.7.2 でもデフォルトだと参照自体はどこからでも可能です。
特に利用することがない場合はプラグインで無効にするなり、アクセス制限するなりしておいた方が良いと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です