このサイトは自作プラグインのテストなども兼ねているため、以下の方法で画面出力させずにエラーのログを取るようにしています(一部コードは違うかも..)。
このログに「WordPress database error Commands out of sync; you can’t run this command now for query UPDATE」という文字列を先頭とした1行で大量のエラー文が出力されてびっくりしました。
このエラー自体は、平たく言うと、WordPressから要求された処理が実行されたが処理できなかったというもので、一気にたくさんの要求があったので処理できず、データの整合性(確実性)が担保できていない可能性があるというものです。
従って、本ページで後述するようなことがなくても、WordPressで多数のアクセスがあるサイトや何等かのリクエストが多数あるサイトでは、サーバーの処理能力によってはたまに発生することがあるので、常時発生しているというわけでなければ特に問題視する必要はないと思います。
さて、今回出力された英語のエラー内容を読んでいくと、プラグインやテーマの更新情報に関するもの、optionsテーブルの情報との同期などが含まれていました。
そして一番大量に書かれていたのが、当サイト配布しているHima Art Utilityプラグインで有効にしているログイン試行回数制限における、制限がかかった時にoptionsテーブル内に一時的に保存するデータでした。
たくさんのIPアドレスからログイン試行に失敗した形跡があり、きちんと3回目(ログでは2回分)に制限がかかっていることが確認できたので、このログイン試行回数制限が確実に効いていることが分かってよかったのですが、当サイトでは.htaccessでログイン画面へのアクセス制限を行っているのでログイン画面に許可したIPアドレス以外からアクセスできることがないはず、そして、試行回数制限はログイン画面で3回以上失敗したら一定期間ロックするというものなので、ログイン画面にアクセスできていないはずなのに何でエラーの内容として出力されているのか..という疑問が発生しました。
いろいろと検索するも納得いく情報が得られなかったので、AI(Gemini)へ相談してみたところ以下のような回答がありました。
あなたのサイトがCloudflareなどのCDNやプロキシサービスを利用している場合、サーバーが受け取るIPアドレスはCDN/プロキシのIPアドレスになります。この場合、
.htaccess
で設定した自宅IP制限は、実際にはCDN/プロキシのIPに対して適用されていることになり、攻撃者の本来のIPアドレスはブロックできていません。
.htaccess
ファイルの記述場所が適切でない(例:WordPressのルートではなく、さらに下層のディレクトリに置かれている)、またはサーバーの設定(Apacheの設定など)で.htaccess
が有効になっていないなどの理由で、正しくIP制限が機能していない可能性もゼロではありません。非常に稀ですが、一部の洗練されたボットが、HTTPプロトコルの特定の特性を利用してアクセス制限をすり抜けるような挙動を示す可能性も考えられます。ただし、これは一般的ではありません。
大きくこの3つが挙げられたものの、CDNは使用していないし、.htaccessファイルの記述が正しいことは確認していますから、原因は非常に稀に..と書かれていることに違いないだろうという結論に至りました。
そこで対策として.htaccessへ今回アクセスのあった大量のIPアドレスを拒否する記述を追加すればいいのか..ということかと思いましたが、拒否はされているはずなのにすり抜けていることから.htaccessへ追記しても多分効かないのでは?という疑念が湧き、サーバーのcPanelにあるIPブロッカーという機能を使って拒否することにしました。
これで減るといいけど...多分無数にスパムを仕掛けてくるIPアドレスは存在するのでいたちごっこなのでしょうね...。
ちなみに出力されたIPアドレスについてはCleanTalkというサイトでスパムIPアドレスとして報告があるかどうかを見て追加しました。
コメントを残す