セキュリティ対策のため、特定の文字列を含むPOSTを弾いているっぽい。まさかこんな方法で対策しているとは思わず原因を特定するのに難儀した。
原因はWordpressではなく、サーバーに搭載されているWAF(Webアプリケーションファイアウォール)。
サーバーの管理画面からログを見ると確かにxmlrpc.php がファイアウォールによって検知されている。
XML-RPC の投稿で、以下の文字列が含まれているだけで 403 エラーとなるらしい。
create table
create table という文字列が並ぶ文章を投稿しようとするとエラーになる。これらはDBを操作するSQLで使われるもので、そういった文字列をpostしようとするとWAFでブロックする設定だったようだ。
ブログの投稿にSQLのサンプルコードを含む場合はかなり面倒になる。
WAFを特定のIPアドレスからは除外する設定ができればよいが、できなかったので一時的に無効にするしかなさそう。
普段問題なければオンにしておいたほうが良い。